Ment0r
Окт. 29, 2007 01:41:11
При работе с гридом, пытаюсь вызвать событие
wx.grid.EVT_GRID_CELL_CHANGE и вернуть новую запись в ячейке.
Содержимое ячейки возвращается одновременно с событием, т.е. то
которое было до изменения. Как можно получить после окончания события
измененное содержимое ячейки?
proDiva
Окт. 30, 2007 14:37:15
Вот пример, у меня все верно отрабатывает:
# -*- 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()