我有以下代码的wxPyhon
self.button1 = wx.Button(self, id=-1, label='Button1',pos=(8, 8), size=(175, 28))
self.button2 = wx.Button(self, id=-1, label='Button2',pos=(16, 8), size=(175, 28))
self.button1.Bind(wx.EVT_BUTTON, self.onButton)
self.button1.Bind(wx.EVT_BUTTON, self.onButton)
我需要根据luanched事件处理以下功能中的按钮 有人可以提出一个想法,即
def button1Click(self,event):
if(event of button1 ) :
#proccess code
if(event of button2 ):
#proccess code
我怎么知道哪个按钮能够举办活动
答案 0 :(得分:3)
一种选择是使用标签(或ID ...但通常更麻烦)来关闭,例如:
def onButton(self, event):
label = event.GetEventObject().GetLabel()
if label == "foo":
...
elif label == "bar":
....
我经常希望它有一个回调机制。所以另一种选择是在绑定期间使用lambda。见tutorial
答案 1 :(得分:1)
如果有不同的处理代码,你应该为每个人都有一个功能。
self.button1 = wx.Button(self, id=-1, label='Button1',pos=(8, 8), size=(175, 28))
self.button2 = wx.Button(self, id=-1, label='Button2',pos=(16, 8), size=(175, 28))
self.button1.Bind(wx.EVT_BUTTON, self.onButton1)
self.button1.Bind(wx.EVT_BUTTON, self.onButton2)
def onButton1(self,event):
# process code
def onButton2(self,event):
# process code
答案 2 :(得分:1)
就个人而言,我喜欢自己获取按钮对象:
button = event.GetEventObject()
然后我可以使用任何按钮的方法,如GetName,GetId或GetLabel。设置名称可能是最简单的,因为有时我会有两个具有相同标签的按钮。
myButton = wx.Button(self, label="blah blah", name="blah blah one")
现在你可能很狡猾。在程序的某个地方,你可以有一个dict,用它们应该运行的方法映射按钮名称:
self.myDict = {"btnOne":methodOne, "btnTwo":methodTwo}
然后在您的事件处理程序中,您可以使用类似
的内容myButton = event.GetEventObject()
buttonName = myButton.GetName()
if buttonName in self.myDict:
self.myDict[buttonName]()
另请参阅http://wiki.wxpython.org/Passing%20Arguments%20to%20Callbacks或http://wiki.wxpython.org/self.Bind%20vs.%20self.button.Bind
答案 3 :(得分:0)
您可以使用按钮标签来识别它
def onButton(self,event):
buttonLabel = event.GetEventObject().GetLabel()
if buttonLabel == "Button1":
doSomething()
elif buttonLabel == "Button2":
doSomethingElse()