Tkinter GUI更新问题(Python)

时间:2014-12-16 02:23:01

标签: python user-interface tkinter

我目前在Tkinter中遇到GUI问题。我编造了一个例子来说明我的观点:

import tkinter as tk
import time

bob = tk.Tk()
bob.geometry("100x70")
bob.resizable(0, 0)
## Initialises the window and makes it look pretty


label = tk.Label(bob, text = "Test")
label.pack()
label.place(x=40,y=25)
## Initalises a label and makes it look pretty as well

def some_task():
    print("Hi")
    label.config(text = "Not a test anymore")
    time.sleep(5)
    print("Bye")

如果您运行此代码,您会注意到即使标签在程序等待之前更新然后打印"再见",GUI最后更新。这对我来说是一个问题,因为我的程序需要在屏幕上向用户显示正在发生的事情。

有谁知道这是为什么?有什么方法可以解决这个问题吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

通常,要在tkinter中使用计时器,您应该使用bob.after方法。例如,通过更改代码如下:

import tkinter as tk
import time

bob = tk.Tk()
bob.geometry("200x70")
bob.resizable(0, 0)
## Initialises the window and makes it look pretty


label = tk.Label(bob, text = "Test")
label.pack()
label.place(x=40,y=25)
## Initalises a label and makes it look pretty as well

def some_task():
    print("Hi")
    label.config(text = "Not a test anymore")
#    time.sleep(5)          # <-- comment out this
    print("Bye")

bob.after(5000, some_task)  # <-- use after to call some_task() after 5s.

bob.mainloop()    

将导致以下操作: 1. Tk窗口,标签包含&#34; text&#34;显示。 2. 5秒后,标签更新为&#34;不再是测试&#34;