2013-04-02 7 views
2

가능한 경우이를 알기 위해 답을 찾는 데 어려움이 있습니다. 필자는 wxpython 데모를보고 아무런 소용이없는 검색을 수행했습니다.wxpython, self.Bind의 함수에 데이터를 전달합니다.

조치를 바인딩 할 때 일종의 데이터를 함수 호출에 전달하는 방법은 무엇입니까? 예

self.Bind (wx.EVT_MENU, self.DoThis, 항목 1)

self.Bind (wx.EVT_MENU, self.DoThis, 항목 2)

I가 세트가 동일한 기능 (DoThis)에 의해 처리되기를 원하는 메뉴 옵션 중 일부는 선택되었지만 그 출력은 어떤 메뉴 항목이 선택되었는지에 달려 있기 때문에 해당 기능을 일부 데이터로 전달해야합니다.

각 메뉴 항목을 다른 기능에 바인딩 할 수 있으므로 여러 번 복제 할 수 있지만 코드의 명확성과 길이를 위해 모든 항목을 동일한 기능으로 처리하는 것이 훨씬 간단합니다. 왜냐하면 나는 약 12 ​​가지 메뉴 아이템을 가지고 있기 때문이다. 이것은 가능한가? 감사합니다

답변

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

나는 시도했다. 그것은 작동합니다!

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

따라서 모든 데이터를 모든 함수에 전달할 수 있습니다.

관련 문제