Java 从工作线程-tkinter-Python更新GUI元素
我有一个Python GUI tkinter应用程序 当我按下GUI中的按钮时,我有一个长时间运行的任务要执行。Java 从工作线程-tkinter-Python更新GUI元素,java,python,tkinter,worker,Java,Python,Tkinter,Worker,我有一个Python GUI tkinter应用程序 当我按下GUI中的按钮时,我有一个长时间运行的任务要执行。 因此,我希望在另一个线程中运行此任务,并且仅当任务完成时,才更新一些GUI元素,例如,将文本添加到一些textwidget。当它运行时,我想更新一些状态栏,这样用户就可以很好地看到这个过程 很久以前,我就在Java中使用SwingUtilities.invokeLater 对于这类事情,Python模拟或say最佳实践是什么 你能给我指一些参考资料或给我举个简单的例子吗 还有。
因此,我希望在另一个线程中运行此任务,并且仅当任务完成时,才更新一些GUI元素,例如,将文本添加到一些
text
widget。当它运行时,我想更新一些状态栏,这样用户就可以很好地看到这个过程
很久以前,我就在Java中使用SwingUtilities.invokeLater
我建议执行
线程
任务,并将结果添加到队列
。然后,主GUI将定期处理队列
。有一个很好的例子。在这个问题上,我们讨论了一些参考资料,它可能会帮助你@HenryYik,因此无法像Java中那样使用SwingUtilities.invokeLater
将一些工作直接发布到GUI线程?相反,在worker中,我们将post发送到某个队列,GUI线程定期检查该队列并相应地执行操作?这是我们在Python中能做的最好的了?我的意思是SwingUtilities.invokeLater
在Python中没有类似的功能,你是说。。。对吗?这是一种常见的方法,是的。另一种方法是像我一样使用变量作为标志。因为tkinter
是单线程的,直接使用GUI线程不是线程安全的,这可能会导致不期望的行为。你可以阅读更多关于布莱恩的答案tkinter
确实有一个方法,但它仍然在主线程中运行。我建议thread
该任务并将结果添加到队列中。然后,主GUI将定期处理队列
。有一个很好的例子。在这个问题上,我们讨论了一些参考资料,它可能会帮助你@HenryYik,因此无法像Java中那样使用SwingUtilities.invokeLater
将一些工作直接发布到GUI线程?相反,在worker中,我们将post发送到某个队列,GUI线程定期检查该队列并相应地执行操作?这是我们在Python中能做的最好的了?我的意思是SwingUtilities.invokeLater
在Python中没有类似的功能,你是说。。。对吗?这是一种常见的方法,是的。另一种方法是像我一样使用变量作为标志。因为tkinter
是单线程的,直接使用GUI线程不是线程安全的,这可能会导致不期望的行为。你可以阅读更多关于布莱恩的答案tkinter
确实有一个方法,但它仍然在主线程中运行。