当前位置:  开发笔记 > 编程语言 > 正文

在wxPython中生成自定义CommandEvent

如何解决《在wxPython中生成自定义CommandEvent》经验,为你挑选了2个好方法。

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



1> 小智..:

我知道这是一个老问题,但是在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> Vebjorn Ljos..:

为了传播,事件必须是wx.CommandEvent.(有关传播的详细信息,请参阅wxWidgets事件处理概述.)更具体地说,它应该是一个wx.PyCommandEvent,它支持Python,并且能够通过wxWidgets事件系统安全地传输其Python位,并且当它们仍然存在时调用事件处理程序.

定义您的自定义事件类型如下:

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)

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有