3

我很难找到答案来知道它是否可能。我查看了 wxpython 演示并进行了一些谷歌搜索,但无济于事。

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

例如

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

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

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

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

4

3 回答 3

3

一个相关的问题是是否可以将参数传递给事件绑定?. 这可以通过将参数传递给回调来实现,正如您可以看到将参数传递给回调一样。

于 2013-04-02T23:13:17.390 回答
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()
于 2013-04-02T23:24:07.137 回答
0

我试过了。有用!

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

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

于 2015-05-07T17:28:32.313 回答