【问题标题】:Tkinter and multi-threadingTkinter 和多线程
【发布时间】:2013-02-24 22:19:56
【问题描述】:

我正在使用以下代码来检查 Tkinter 是否与多线程一起工作。但是下面的代码不起作用(Gui 一运行就没有响应)。谁能解释一下为什么它不起作用?

from threading import Thread 
import tkinter as tk

window = tk.Tk()
label = tk.Label(window, text='Hello')
label.pack()

def func():
    i = 1
    while True:
        label['text'] = str(i)
        i += 1

Thread(target=func).start()
Thread(target=window.mainloop).start()

【问题讨论】:

    标签: python multithreading tkinter


    【解决方案1】:

    它不起作用,因为 Tkinter 不支持多线程。与 Tkinter 小部件交互的所有内容都需要在主线程中运行。如果要使用多线程,请将 GUI 放在主线程中,将其他代码放在工作线程中,并使用线程安全队列在它们之间进行通信。

    【讨论】:

    • @Chandan:没有。坦率地说,我很少需要 GUI 应用程序的多线程,当我这样做时,我通常更喜欢多线程而不是多线程。您是确定需要多个线程,还是只是假设需要?当 GUI 除了等待事件之外什么都不做时,您可以在所有空闲周期中做很多工作。
    • 这是我需要做的:假设,单击一个按钮启动一个进程,然后当我单击另一个按钮时,进程停止(我在子进程中使用了“暂停”命令来执行此操作)然后单击另一个按钮会终止该子进程。所以之前的事件又开始了。
    • @Chandan:你肯定不需要多个线程,因为你已经在生成另一个进程。
    • 您能否解释一下多线程和多处理之间的区别或提供一些参考?我对他们了解不多。
    • @Chandan:如果您不知道线程是什么,那么您绝对不应该编写使用它们的代码。除非您小心,否则它们会增加很多复杂性并可能导致非常微妙的错误。这是一个专门与线程和进程之间的差异相关的 SO 问题:stackoverflow.com/questions/200469/…
    猜你喜欢
    • 1970-01-01
    • 2021-06-13
    • 2018-06-26
    • 2014-12-29
    • 2014-07-30
    • 1970-01-01
    • 2013-10-14
    相关资源
    最近更新 更多