【问题标题】:wxpython, passing data to a function in self.Bindwxpython,将数据传递给 self.Bind 中的函数
【发布时间】:2013-03-24 10:46:07
【问题描述】:

我很难找到这个问题的答案,以了解它是否可能。我查看了 wxpython 演示并做了一些谷歌搜索无济于事。

我在绑定动作时如何将某种数据传递给函数调用?

例如

self.Bind(wx.EVT_MENU, self.DoThis, item1)

self.Bind(wx.EVT_MENU, self.DoThis, item2)

我有一组菜单选项,我想由同一个函数 (DoThis) 处理,但需要向该函数传递一些数据,因为它的输出取决于选择了哪个菜单项。

我知道我可以将每个菜单项绑定到不同的函数,因此可以多次复制它,但是为了代码的清晰和长度,在同一个函数中处理它们会简单得多,因为我有大约十几个菜单项。这甚至可能吗?谢谢

【问题讨论】:

    标签: wxpython


    【解决方案1】:

    一个相关的问题是Is it possible to pass arguments into event bindings?。这可以通过将参数传递给回调来实现,正如您在 passing arguments to callbacks 看到的那样。

    【讨论】:

    • 太完美了!我需要更好地学习术语,以便更容易通过搜索找到答案,感谢您花时间帮助我!
    【解决方案2】:

    你可以这样做。

    import wx
    
    
    class TestFrame(wx.Frame):
        def __init__(self, *args, **kwargs):
            super(TestFrame, self).__init__(*args, **kwargs)
    
            menubar = wx.MenuBar()
            self.SetMenuBar(menubar)
    
            menuFile = wx.Menu()
            self.menuSave = menuFile.Append(-1, 'Save', 'Save Document')
            self.menuClose = menuFile.Append(-1, 'Close', 'Close Application')
            menubar.Append(menuFile, '&File')
            self.Bind(wx.EVT_MENU, self.onMenu)
    
            panel = wx.Panel(self)
    
            pSizer = wx.BoxSizer(wx.VERTICAL)
    
            panel.SetSizer(pSizer)
    
            vSizer = wx.BoxSizer(wx.VERTICAL)
            vSizer.Add(panel, 1, wx.EXPAND)
            self.SetSizer(vSizer)
            self.Layout()
    
        def onMenu(self, event):
            menuId = event.Id
            if menuId == self.menuSave.Id:
                print 'menuSave'
            elif menuId == self.menuClose.Id:
                print 'menuClose'
    
    
    if __name__ == '__main__':
        wxapp = wx.App(False)
        testFrame = TestFrame(None)
        testFrame.Show()
        wxapp.MainLoop()
    

    【讨论】:

      【解决方案3】:

      我试过了。有效!

      self.Bind(wx.EVT_BUTTON, lamdba evt, a=1, b=2: self.funcName(evt, a, b), buttonName)
      

      因此,您可以将任何数据传递给任何函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-14
        • 2021-02-27
        • 1970-01-01
        • 1970-01-01
        • 2020-07-28
        • 2011-06-19
        • 2019-08-03
        相关资源
        最近更新 更多