3

これが可能かどうかを知るために、これに対する答えを見つけるのに苦労しています。私は wxpython デモを見て、無駄にいくつかのグーグルをしました。

アクションをバインドしているときに、関数呼び出しにある種のデータを渡すにはどうすればよいですか?

例えば

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

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

同じ関数 (DoThis) で処理したい一連のメニュー オプションがありますが、その出力は選択されたメニュー項目に依存するため、その関数にデータを渡す必要があります。

各メニュー項目を別の関数にバインドできるので、何度も複製できることはわかっていますが、コードを明確にし、長さを保つために、同じ関数ですべてを処理する方がはるかに簡単です。十数種類のメニューがあります。これは可能ですか?ありがとう

4

3 に答える 3

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 に答える