【问题标题】:Get the object that invoke an event获取调用事件的对象
【发布时间】:2012-03-13 17:27:55
【问题描述】:

如果我有两个对象会调用相同的方法,那么会发生一个事件,是否可以查看它们中的哪一个调用了该事件?

让它更清晰。如果我有两个按钮和一个被调用的方法,那么我点击它们。在这个方法中我可以做什么来查看被点击的按钮?

...
buttonA.Bind(wx.EVT_BUTTON ,self.methode)
buttonB.Bind(wx.EVT_BUTTON ,self.methode)
...
...
def methode(self,event)
  #get the button that was clicked 

【问题讨论】:

    标签: python events wxpython


    【解决方案1】:

    试试这个:

    ...
    buttonA.Bind(wx.EVT_BUTTON ,self.methode)
    buttonB.Bind(wx.EVT_BUTTON ,self.methode)
    ...
    ...
    def methode(self, event)
      #get the button that was clicked 
      button = event.GetEventObject()
    
      print button.GetLabel()
    

    【讨论】:

    • 谢谢,这就是我要找的东西
    【解决方案2】:

    最简单的方法是创建两个单独的方法:

    buttonA.Bind(wx.EVT_BUTTON, self.method_from_A)
    buttonB.Bind(wx.EVT_BUTTON, self.method_from_B)
    

    如果这两个方法共享代码,那么它们都可以调用其他一些辅助方法。

    不要将它们命名为method_from_X 之类的任意名称,而是尝试选择能够阐明为什么情况不同的名称。对于名称,关注“为什么”而不是实现细节。

    如果你真的想要一个回调方法,你可以按照这里关于将参数传递给回调的说明进行操作:

    http://wiki.wxpython.org/Passing%20Arguments%20to%20Callbacks

    【讨论】:

    • 如果我有两个以上的对象(按钮),比如说 100 个,那么我将不得不创建 100 个辅助方法。这会产生很多无意义的代码
    • 您没有提供很多关于您的用例的信息。一般来说,按钮和方法之间的一对一关系将使您的代码更具可读性。您能否提供更多有关您正在尝试做的事情以及原因的信息?
    猜你喜欢
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多