wxPython:在frame1上选择一行时,在frame2上选择了同一行

时间:2019-07-19 00:23:27

标签: python wxpython

我有一个使用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()

谢谢

1 个答案:

答案 0 :(得分:0)

问题解决了。因此,如果有人遇到相同的问题,这就是我所做的。

第一个解决方案是删除foo=[{label:"IE",value:"ie"},{label:"Firefox",value:"firefox"}] ,因为事件正在传播到错误的父窗口。这样就解决了行选择问题,但是我仍然遇到无法选择父框架中不存在的子框架中任何行的问题。

要解决此问题,我在致电Bind时必须更加具体。我在第3个参数中传递了指定的源窗口小部件。这样,绑定仅匹配来自该小部件的事件。换句话说:

evt.Skip() in OnSelectCell