相对较新的wxPython和线程,因此混乱。
我必须对目标数据执行5个“步骤”。必须按给定顺序依次执行这些步骤。
为了保持GUI响应,我将每个步骤编码为一个单独的线程。
当我手动完成整个过程(使用按钮开始每一步)时,我可以看完每个步骤,在完成后更新显示。
我迷失了如何按顺序自动调用每个线程。如果我要创建一个标记为“连续执行所有5个步骤”的按钮,按钮调用的代码会是什么样的?
我尝试过按顺序调用每个线程方法,但它们都尝试一次对数据进行操作。每个线程使用'with'和threading.Lock()来防止其他线程在给定线程运行时访问数据,但线程似乎没有以正确的顺序执行。
写
的正确方法是什么 call_thread1()
call_thread2()
call_thread3()
..等
总是以给定的顺序执行线程,并且只在每个线程完成后才会阻塞wx?
答案 0 :(得分:2)
将gui的等待步骤成员作为列表和线程完成处理程序,如果有下一个任务将其从列表中弹出并启动该线程。
在__init__(self) :
self.TaskList = []
在OnDoAllClicked(self, evt)
:
self.TaskList.extend([call_thread1, call_thread2, call_thread3, etc])
CheckNextTask()
在CheckNextTask(self)
:
if len(self.TaskList) > 0:
current = self.TaskList[0]
del self.TaskList[0]
current(callback=self.CheckNextTask)
在每个帖子中:
while not Done:
# Do whatever
wx.CallAfter(callbacK)
答案 1 :(得分:2)
我想我会采用不同的方法。我会调用一个包含五个函数中的每一个的单个线程。然后该线程可以按顺序调用每个函数,当每个函数返回时,它可以使用GUI的一个线程安全方法(wx.CallAfter,wx.PostEvent)向GUI发送更新。
以下是有关wxPython和线程的更多信息的几个资源: