【问题标题】:Tkinter GUI window stops working in the backgroundTkinter GUI 窗口在后台停止工作
【发布时间】:2020-01-29 08:55:34
【问题描述】:

我正在尝试使用 Tkinter 作为它的 GUI 创建一个 Python 数据分析器。该程序的工作是提取数据,对其执行一些计算,然后在 Tkinter GUI 上显示结果。使用这些显示的结果,我将在另一个应用程序上执行其他任务。我的问题是,一旦我单击其他应用程序(或任何不是 Tkinter GUI 窗口的应用程序),GUI 就会停止像以前那样实时显示信息。

我希望 GUI 仍然显示数据,即使我正在使用其他应用程序。

下面是示例代码,可以让您了解我想要做什么:

from tkinter import *
from time import sleep

root = Tk()
var = StringVar()
var.set('hello')

l = Label(root, textvariable = var)
l.pack()

for i in range(100):
    sleep(0.5)
    var.set('goodbye' if i%2 else 'hello')
    root.update_idletasks()

因此,如果您运行此程序并单击其他内容,例如桌面,窗口将在它显示的最后一个单词处冻结。

【问题讨论】:

    标签: python user-interface tkinter


    【解决方案1】:

    不要使用带有time.sleep 的循环来阻塞tkinter 的主线程,而应该使用root.after 进行此类操作:

    from tkinter import *
    
    root = Tk()
    var = StringVar()
    var.set('hello')
    
    l = Label(root, textvariable = var)
    l.pack()
    
    def func(counter):
        var.set("goodbye" if counter % 2 else "hello")
        counter+=1
        if counter<100:
            root.after(500, func, counter)
    
    root.after(500, func, 0)
    
    root.mainloop()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      • 1970-01-01
      • 2020-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多