【问题标题】:Handling events in wxPython在 wxPython 中处理事件
【发布时间】:2009-08-20 20:01:42
【问题描述】:

如何将参数传递给 wxPython 中的事件处理程序?

这是我的代码:

    def close_handler(event):
        baz(foo)

    ...

    foo = 'bar'
    frame.Bind(wx.EVT_CLOSE, close_handler)

如何将 foo 传递给close_handler() 函数?

【问题讨论】:

    标签: events wxpython


    【解决方案1】:
    import functools
    
    def close_handler(event, foo):
        baz(foo)
    
    foo = 'bar'
    func = functools.partial(close_handler, foo=foo)
    frame.Bind(wx.EVT_CLOSE, func)
    

    或者为了节省一些空间:

    import functools
    
    def close_handler(event, foo):
        baz(foo)
    
    frame.Bind(wx.EVT_CLOSE, functools.partial(close_handler, foo='bar'))
    

    【讨论】:

      【解决方案2】:

      让close_handler 创建第二个使用foo 的事件处理函数:

      def close_handler(foo):
          return lambda event: baz(foo)
      
      foo = 'bar'
      frame.Bind(wx.EVT_CLOSE, close_handler(foo))
      

      这里的lambda event: baz(foo) 是一个匿名函数,它调用baz(foo),默默地丢弃event 参数。或者,如果您愿意,也可以将其传递给 baz:lambda event: baz(foo, event)。

      你也可以不使用lambda 像这样写:

      def close_handler(foo):
          def event_handler(event):
              return baz(foo)
      
          return event_handler
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-11
        相关资源
        最近更新 更多