wxPython中,将数据传递到在self.Bind函数(wxpython, passing dat

2019-08-19 03:31发布

我无法找到这个问题的答案要知道如果它的可能。 香港专业教育学院看着在wxPython的演示,并做了一些谷歌上搜索无果。

我该如何通过某种数据的函数调用时,我结合行动?

例如

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

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

我有一组的,我想通过相同的功能(DoThis)来处理的菜单选项,但需要通过这个函数的一些数据,因为它的输出取决于选择哪个菜单项上。

我知道我可以每个菜单项只是绑定到不同的功能,因此可以只复制它一堆倍,但对清晰度和码长的缘故,它就会简单得多来处理这一切在相同的功能,因为我有十几个菜单项。 这甚至可能吗? 谢谢

Answer 1:

一个相关的问题是, 是否有可能将参数传递到事件绑定? 。 这可以通过将参数传递给回调做到这一点,你可以看到参数传递给回调 。



Answer 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()


Answer 3:

我试过了。 有用!

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

所以,你可以传递任何数据到任何功能。



文章来源: wxpython, passing data to a function in self.Bind
标签: wxpython