python - Tkinter GUI 窗口在后台停止工作
问题描述
我正在尝试使用 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()
因此,如果您运行该程序并单击其他内容,例如桌面,则窗口将在显示的最后一个单词处冻结。
解决方案
而不是使用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()
推荐阅读
- python - 使用字符串生成唯一 ID
- reactjs - Is SPA a monolith in the browser?
- python - Sapcy 3.0:无法为 Lemmatizer 添加服装查找
- php - Symfony Panther - 如何在本地主机上保持 SSL?
- python - 无法从 Python 中的 SOAP 请求生成响应
- javascript - 如何在节点 js 中将用户重定向到他们的特定页面
- python - 使用 Telethon 时运行循环
- c# - 为什么 Quartz .NET 3.0.7 调度程序在 DB 不可用错误上挂起
- jquery - Bootbox将微调器图标添加到按钮onclick?
- c - 为什么在这种情况下我不能使用分配的指针?