代码之家  ›  专栏  ›  技术社区  ›  Vebjorn Ljosa

在wxPython中生成自定义CommandEvent

  •  5
  • Vebjorn Ljosa  · 技术社区  · 16 年前

    我的顶级窗口需要知道自定义控件的内部状态何时更改,以便它可以更新GUI的其他各个部分。如何在控件中生成自定义事件,以便它可以传播并由顶级窗口处理?

    2 回复  |  直到 16 年前
        1
  •  12
  •   Alan Briolat    15 年前

    我知道这是一个老问题,但在wxPython中有一种更新、更好的方法可以做到这一点。释义自 http://wiki.wxpython.org/CustomEventClasses 以及上述内容:

    要定义事件,请执行以下操作:

    import wx.lib.newevent
    QuantityChangedEvent, EVT_QUANTITY_CHANGED = wx.lib.newevent.NewCommandEvent()
    

    要生成事件,请执行以下操作:

    event = QuantityChangedEvent(self.GetId())
    self.GetEventHandler().ProcessEvent(event)
    # or ...
    #wx.PostEvent(self, event)
    

        2
  •  11
  •   Vebjorn Ljosa    16 年前

    为了传播,事件必须是 wx.CommandEvent wxWidgets event handling overview wx.PyCommandEvent

    EVT_QUANTITY_CHANGED = wx.PyEventBinder(wx.NewEventType(), 1)
    

    您可能希望在模块级别执行此操作,尽管在某些情况下可能希望在 __init__ 你的控制方法。

    event = wx.PyCommandEvent(EVT_QUANTITY_CHANGED.typeId, self.GetId())
    self.GetEventHandler().ProcessEvent(event)
    

    self.Bind(mycontrol.EVT_QUANTITY_CHANGED, self.OnQuantityChanged)
    
    推荐文章