我需要根据完成的计算更改Tkinter标签的文本。我使用简单的label.configure(text="something new")
。问题是我需要在while循环的每次迭代中都这样做。该过程只是等待循环完成然后显示最后的结果。我不断地需要它们。
def new_frequency_1000times():
k=1
while k>1000:
#steps to determine new frequency f
freq_out.configure(text=str(f))
k=k+1
master=Tk()
freq_out = Label(master)
freq_out.grid(row=0, column=1)
button_freq=Button(okno, command=new_frequency_1000times, text="Get new f")
button_freq.grid(row=0, column=0)
知道如何强制循环中的“评估”吗?
答案 0 :(得分:2)
你的问题是你在主要的偶数线程中运行了while
循环。因此,它会在while循环完成之前阻塞。使用after
或threading
。
这是一个小例子:
import tkinter as tk
def new_frequency_1000times(k=0):
if k < 1000:
freq_out.configure(text=str(k))
#1000 ms = 1 seconds, adjust to taste.
root.after(10, lambda: new_frequency_1000times(k+1))
root=tk.Tk()
freq_out = tk.Label(root)
freq_out.grid(row=0, column=1)
button_freq=tk.Button(root, command=new_frequency_1000times, text="Get new f")
button_freq.grid(row=0, column=0)
root.mainloop()
答案 1 :(得分:0)
您需要处理窗口系统事件以使任何可见的事件发生。像这样在紧密循环中做任何事情只会锁定你的UI。相反,您需要使用after
方法将更改计划为某个时间间隔,并允许事件循环处理必要的UI事件。