Latest posts on ...и снова wxPython topichttps://python.su/forum/topic/1387/2007-10-30T14:37:15+02:00Общий :: GUI :: ...и снова wxPython
2007-10-30T14:37:15+02:00proDiva8824Вот пример, у меня все верно отрабатывает:<br/><br/># -*- coding: cp1251 -*-<br/><br/>“Пример работы с гридом”<br/><br/>from wxPython.wx import *<br/>from wxPython.grid import *<br/>import wx.grid<br/>import wx<br/> <br/>class MyFrame(wx.Frame):<br/> def __init__(self, *args, **kwds):<br/> kwds = wxDEFAULT_FRAME_STYLE<br/> wxFrame.__init__(self, *args, **kwds)<br/> <br/> self.SetSize((550, 400))<br/> font_1 = wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.BOLD)<br/> <br/> self.window1 = wxSplitterWindow(self, -1, style=wxNO_BORDER)<br/> self.panel1 = wxPanel(self.window1, -1)<br/> self.panel2 = wxPanel(self.window1, -1)<br/><br/> self.exit = wxButton(self.panel2, -1, “Выход”)<br/> self.exit.SetFont(font_1)<br/><br/> #создание грида<br/> self.grid = wxGrid(self.panel1, -1, size=(1, 1))<br/> self.grid.CreateGrid(100, 100)<br/> self.grid.SetRowLabelSize(40)<br/> self.grid.SetColLabelSize(40)<br/> self.grid.SetMinSize((500,300))<br/><br/> self.grid.SetColLabelValue(0, “Столбец широкий”)<br/> self.grid.SetColSize(0,200)<br/> self.grid.SetColLabelValue(1, “Узкий”)<br/> self.grid.SetColSize(1,50)<br/><br/> <br/> EVT_BUTTON(self, self.exit.GetId(), self.on_exit) # выход<br/> EVT_GRID_CELL_CHANGE(self.grid, self.on_change) #событие на изменение данных в таблице на первой вкладке<br/> EVT_GRID_SELECT_CELL(self.grid, self.on_select) #событие на выбор ячейки<br/> <br/> self.panel1.SetMinSize((550, 370))<br/> self.panel2.SetMinSize((550, 30))<br/> self.window1.SetMinSize((550, 400))<br/><br/> sizer = wxBoxSizer(wxVERTICAL) #сайзеры, на которых держатся элементы формы<br/> sizer_1 = wxBoxSizer(wxVERTICAL)<br/> sizer_2 = wxBoxSizer(wxVERTICAL)<br/><br/> sizer_1.Add(self.grid, -1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)<br/> sizer_2.Add(self.exit, -1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)<br/><br/> self.panel1.SetSizer(sizer_1)<br/> self.panel2.SetSizer(sizer_2)<br/> self.window1.SplitHorizontally(self.panel1, self.panel2)<br/> sizer.Add(self.window1, 1, wxALL|wxEXPAND, 0)<br/> self.SetAutoLayout(True)<br/> self.SetSizer(sizer)<br/> self.Layout()<br/> self.Centre()<br/> <br/> def on_exit(self, event):<br/> self.Destroy()<br/><br/> def on_select(self, event):<br/> tb = self.grid.GetTable()<br/> if tb.GetNumberRows() > 0:<br/> r = self.grid.GetGridCursorRow()<br/> print “Номер строки ”+str(r)+“!\n”<br/> #self.Update()<br/> event.Skip()<br/><br/> def on_change(self, event): <br/> row = self.grid.GetGridCursorRow()<br/> col = self.grid.GetGridCursorCol()<br/> val = self.grid.GetCellValue(row,col)<br/> print ‘Изменилась ячейка ’+str(row)+','+str(col)+'! Новое значение ‘+str(val)+’!\n'<br/> event.Skip()<br/><br/>class MyApp(wx.App):<br/> def OnInit(self):<br/> wxInitAllImageHandlers()<br/> frame = MyFrame(None, -1, “Пример Грида”)<br/> self.SetTopWindow(frame)<br/> frame.Show()<br/> return 1<br/> <br/>if __name__ == “__main__”:<br/> <br/> app = MyApp(redirect=True)<br/> app.MainLoop()<br/>
Общий :: GUI :: ...и снова wxPython
2007-10-29T01:41:11+02:00Ment0r8798При работе с гридом, пытаюсь вызвать событие<br/>wx.grid.EVT_GRID_CELL_CHANGE и вернуть новую запись в ячейке.<br/>Содержимое ячейки возвращается одновременно с событием, т.е. то<br/>которое было до изменения. Как можно получить после окончания события<br/>измененное содержимое ячейки?