使用wxpython绑定事件

时间:2010-09-08 22:07:14

标签: python wxpython

我有以下代码的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

我怎么知道哪个按钮能够举办活动

4 个答案:

答案 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%20Callbackshttp://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()