gpt4 book ai didi

python - 模块之间的 wxPython、Threads 和 PostEvent

转载 作者:行者123 更新时间:2023-12-01 06:17:18 24 4
gpt4 key购买 nike

我对 wxPython 比较陌生(但不是 Python 本身),所以如果我在这里遗漏了一些东西,请原谅我。

我正在编写一个 GUI 应用程序,它在非常基本的级别上由启动和停止线程的“启动”和“停止”按钮组成。这个线程是一个无限循环,只有当线程停止时才会结束。该循环生成消息,目前仅使用 print 输出。

GUI 类和无限循环(使用threading.Thread 作为子类)保存在单独的文件中。让线程将更新推送到 GUI 中的 TextCtrl 等内容的最佳方法是什么?我一直在尝试使用 PostEventQueue,但运气不佳。

这是一些基本代码,为了保持简洁而删除了部分代码:

main_frame.py

import wx
from loop import Loop

class MainFrame(wx.Frame):
def __init__(self, parent, title):
# Initialise and show GUI
# Add two buttons, btnStart and btnStop
# Bind the two buttons to the following two methods
self.threads = []
def onStart(self):
x = Loop()
x.start()
self.threads.append(x)
def onStop(self):
for t in self.threads:
t.stop()

循环.py

class Loop(threading.Thread):
def __init__(self):
self._stop = threading.Event()
def run(self):
while not self._stop.isSet():
print datetime.date.today()
def stop(self):
self._stop.set()

我曾经一度通过使用 wx.lib.newevent.NewEvent()these lines 将类放在同一个文件中来使其工作。 。如果有人能指出我正确的方向,我将不胜感激。

最佳答案

最简单的解决方案是使用 wx.CallAfter

wx.CallAfter(text_control.SetValue, "some_text")

您可以从任何线程调用 CallAfter,并且您传递给它的要调用的函数将从主线程调用。

关于python - 模块之间的 wxPython、Threads 和 PostEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2544339/

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