Java 从工作线程-tkinter-Python更新GUI元素

Java 从工作线程-tkinter-Python更新GUI元素,java,python,tkinter,worker,Java,Python,Tkinter,Worker,我有一个Python GUI tkinter应用程序 当我按下GUI中的按钮时,我有一个长时间运行的任务要执行。 因此,我希望在另一个线程中运行此任务,并且仅当任务完成时,才更新一些GUI元素,例如,将文本添加到一些textwidget。当它运行时,我想更新一些状态栏,这样用户就可以很好地看到这个过程 很久以前,我就在Java中使用SwingUtilities.invokeLater 对于这类事情,Python模拟或say最佳实践是什么 你能给我指一些参考资料或给我举个简单的例子吗 还有。

我有一个Python GUI tkinter应用程序

当我按下GUI中的按钮时,我有一个长时间运行的任务要执行。
因此,我希望在另一个线程中运行此任务,并且仅当任务完成时,才更新一些GUI元素,例如,将文本添加到一些
text
widget。当它运行时,我想更新一些状态栏,这样用户就可以很好地看到这个过程

很久以前,我就在Java中使用
SwingUtilities.invokeLater

  • 对于这类事情,Python模拟或say最佳实践是什么

  • 你能给我指一些参考资料或给我举个简单的例子吗

  • 还有。。。在Python中。。。在线程或进程中处理长时间运行的任务是否重要?UI更新代码/技术是否会有所不同


  • 我建议执行
    线程
    任务,并将结果添加到
    队列
    。然后,主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
    确实有一个方法,但它仍然在主线程中运行。