Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 29, 2007 01:41:11

Ment0r
От:
Зарегистрирован: 2007-10-29
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

...и снова wxPython

При работе с гридом, пытаюсь вызвать событие
wx.grid.EVT_GRID_CELL_CHANGE и вернуть новую запись в ячейке.
Содержимое ячейки возвращается одновременно с событием, т.е. то
которое было до изменения. Как можно получить после окончания события
измененное содержимое ячейки?



Офлайн

#2 Окт. 30, 2007 14:37:15

proDiva
От:
Зарегистрирован: 2007-02-15
Сообщения: 244
Репутация: +  0  -
Профиль   Отправить e-mail  

...и снова wxPython

Вот пример, у меня все верно отрабатывает:

# -*- coding: cp1251 -*-

“Пример работы с гридом”

from wxPython.wx import *
from wxPython.grid import *
import wx.grid
import wx

class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
kwds = wxDEFAULT_FRAME_STYLE
wxFrame.__init__(self, *args, **kwds)

self.SetSize((550, 400))
font_1 = wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.BOLD)

self.window1 = wxSplitterWindow(self, -1, style=wxNO_BORDER)
self.panel1 = wxPanel(self.window1, -1)
self.panel2 = wxPanel(self.window1, -1)

self.exit = wxButton(self.panel2, -1, “Выход”)
self.exit.SetFont(font_1)

#создание грида
self.grid = wxGrid(self.panel1, -1, size=(1, 1))
self.grid.CreateGrid(100, 100)
self.grid.SetRowLabelSize(40)
self.grid.SetColLabelSize(40)
self.grid.SetMinSize((500,300))

self.grid.SetColLabelValue(0, “Столбец широкий”)
self.grid.SetColSize(0,200)
self.grid.SetColLabelValue(1, “Узкий”)
self.grid.SetColSize(1,50)


EVT_BUTTON(self, self.exit.GetId(), self.on_exit) # выход
EVT_GRID_CELL_CHANGE(self.grid, self.on_change) #событие на изменение данных в таблице на первой вкладке
EVT_GRID_SELECT_CELL(self.grid, self.on_select) #событие на выбор ячейки

self.panel1.SetMinSize((550, 370))
self.panel2.SetMinSize((550, 30))
self.window1.SetMinSize((550, 400))

sizer = wxBoxSizer(wxVERTICAL) #сайзеры, на которых держатся элементы формы
sizer_1 = wxBoxSizer(wxVERTICAL)
sizer_2 = wxBoxSizer(wxVERTICAL)

sizer_1.Add(self.grid, -1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
sizer_2.Add(self.exit, -1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)

self.panel1.SetSizer(sizer_1)
self.panel2.SetSizer(sizer_2)
self.window1.SplitHorizontally(self.panel1, self.panel2)
sizer.Add(self.window1, 1, wxALL|wxEXPAND, 0)
self.SetAutoLayout(True)
self.SetSizer(sizer)
self.Layout()
self.Centre()

def on_exit(self, event):
self.Destroy()

def on_select(self, event):
tb = self.grid.GetTable()
if tb.GetNumberRows() > 0:
r = self.grid.GetGridCursorRow()
print “Номер строки ”+str(r)+“!\n”
#self.Update()
event.Skip()

def on_change(self, event):
row = self.grid.GetGridCursorRow()
col = self.grid.GetGridCursorCol()
val = self.grid.GetCellValue(row,col)
print ‘Изменилась ячейка ’+str(row)+','+str(col)+'! Новое значение ‘+str(val)+’!\n'
event.Skip()

class MyApp(wx.App):
def OnInit(self):
wxInitAllImageHandlers()
frame = MyFrame(None, -1, “Пример Грида”)
self.SetTopWindow(frame)
frame.Show()
return 1

if __name__ == “__main__”:

app = MyApp(redirect=True)
app.MainLoop()



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version