gpt4 book ai didi

python - wxPython:线程化 GUI --> 使用自定义事件处理程序

转载 作者:行者123 更新时间:2023-11-28 20:54:12 25 4
gpt4 key购买 nike

我正在尝试学习如何在主 GUI 应用程序之外运行一个线程来执行我的串行端口发送/接收,同时保持我的 GUI 处于事件状态。我最好的谷歌搜索尝试让我进入了 wxpython wiki:http://wiki.wxpython.org/LongRunningTasks其中提供了几个例子。我决定学习第一个示例,涉及在选择特定按钮时启动工作线程。

我无法理解自定义事件定义:

def EVT_RESULT(win, func):
"""Define Result Event."""
win.Connect(-1, -1, EVT_RESULT_ID, func)

class ResultEvent(wx.PyEvent):
"""Simple event to carry arbitrary result data."""
def __init__(self, data):
"""Init Result Event."""
wx.PyEvent.__init__(self)
self.SetEventType(EVT_RESULT_ID)
self.data = data

主要是

def EVT_RESULT(win, func):
"""Define Result Event."""
win.Connect(-1, -1, EVT_RESULT_ID, func)

我认为 EVT_RESULT 被放置在类之外,以便两个类都可以调用它(使其成为全局的?)

并且..主 GUI 应用程序通过以下方式监控线程的进度:

# Set up event handler for any worker thread results
EVT_RESULT(self,self.OnResult)

我还注意到,在很多例子中,当作者使用

from wx import *

他们只是通过以下方式绑定(bind)事物

EVT_SOME_NEW_EVENT(self, self.handler)

相对于

wx.Bind(EVT_SOME_NEW_EVENT, self.handler)

这并不能帮助我更快地理解它。谢谢,

最佳答案

这是定义自定义事件的旧样式。参见 the migration guide获取更多信息。

摘自迁移指南:

If you create your own custom event types and EVT_* functions, and you want to be able to use them with the Bind method above then you should change your EVT_* to be an instance of wx.PyEventBinder instead of a function. For example, if you used to have something like this:

myCustomEventType = wxNewEventType()
def EVT_MY_CUSTOM_EVENT(win, id, func):
win.Connect(id, -1, myCustomEventType, func)

Change it like so:

myCustomEventType = wx.NewEventType()
EVT_MY_CUSTOM_EVENT = wx.PyEventBinder(myCustomEventType, 1)

Here is another post我用几个示例程序制作的,它们完全符合您的要求。

关于python - wxPython:线程化 GUI --> 使用自定义事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2345608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com