我有一个使用API提取一些极简数据的代码,当双击一个单元格时,它将打开一个新框架,其中包含有关该行的更多详细数据。单击单元格时,我还会选择完整的行。
我的问题是,当我在第二帧上选择一行时,它也在第一帧上被选中。另外,例如,当我尝试在第二帧上选择第10行时,而第一帧包含较少的行时,该行将不会被选择,并且会收到一条错误消息,指出该行不存在。
有没有办法区分两个帧?我尝试重命名第二帧TestFrame1,但这没有任何改变。
这是第一帧的代码,第二个是基于相同模板的,只有TestFrame1而不是TestFrame。
class SimpleGrid(gridlib.Grid):
def __init__(self, parent, log):
gridlib.Grid.__init__(self, parent, -1)
# test all the events
self.Bind(gridlib.EVT_GRID_SELECT_CELL, self.OnSelectCell)
#Select complete row
def OnSelectCell(self, evt):
self.log.write("OnSelectCell: (%d,%d) %s\n" %
(evt.GetRow(), evt.GetCol(), evt.GetPosition()))
self.SelectRow(evt.GetRow())
evt.Skip()
#open TestFrame1
def openPublishers(self, evt):
from publishers import TestFrame1
frame = TestFrame1(self, sys.stdout)
frame.Show()
class TestFrame(wx.Frame):
def __init__(self, parent, log):
wx.Frame.__init__(self, parent, 0, "Report", size=(1400,800))
self.grid = SimpleGrid(self, log)
if __name__ == '__main__':
import sys
from wx.lib.mixins.inspection import InspectableApp
app = InspectableApp(False)
frame = TestFrame(None, sys.stdout)
frame.Show(True)
#import wx.lib.inspection
#wx.lib.inspection.InspectionTool().Show()
app.MainLoop()
谢谢
答案 0 :(得分:0)
问题解决了。因此,如果有人遇到相同的问题,这就是我所做的。
第一个解决方案是删除foo=[{label:"IE",value:"ie"},{label:"Firefox",value:"firefox"}]
,因为事件正在传播到错误的父窗口。这样就解决了行选择问题,但是我仍然遇到无法选择父框架中不存在的子框架中任何行的问题。
要解决此问题,我在致电Bind时必须更加具体。我在第3个参数中传递了指定的源窗口小部件。这样,绑定仅匹配来自该小部件的事件。换句话说:
evt.Skip() in OnSelectCell