Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 11, 2007 11:53:59

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

Опять о wxGrid, события!

Опять работаю с гридом, пытаюсь вызвать событие wxEVT_GRID_SELECT_CELL и вернуть номер строки выбранной ячейки. Получается, что номер строки возвращается одновременно с событием выбора ячейки…… как результат, возвращается номер строки ячейки, выбранной в предыдущий раз, а не текущей…. Как бы эти действия сделать последовательными, а не одновременными?



Офлайн

#2 Окт. 11, 2007 12:01:36

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

Опять о wxGrid, события!

Вот пример:

# -*- 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_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)
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()



Офлайн

#3 Окт. 11, 2007 14:50:11

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Опять о wxGrid, события!

Бери у event: event.GetCol(), event.GetRow() и т.д.
Кстати, свежий wx ругается на
from wxPython.wx import *
from wxPython.grid import *
нужно менять на
from wx import *
from wx.grid import *
Только нужно заменять wxFrame на wx.Frame, wxALL на wx.ALL etc.
работает и на несвежих :)

P.S. хорошо поставленный вопрос. Имея такой пример, решение проблемемы заняло примерно столько же времени, сколько и написание этого ответа. Спасибо, экономишь свое и чужое время.



Отредактировано (Окт. 11, 2007 14:58:33)

Офлайн

#4 Окт. 11, 2007 15:00:42

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

Опять о wxGrid, события!

Андрей Светлов
Спасибо! За что люблю этот форум, так это за быструю помощь, что есть самое ценное!



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version