Tkinter的widget.configure在while循环中

时间:2016-04-16 22:11:29

标签: python python-2.7 tkinter

我需要根据完成的计算更改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)

知道如何强制循环中的“评估”吗?

2 个答案:

答案 0 :(得分:2)

你的问题是你在主要的偶数线程中运行了while循环。因此,它会在while循环完成之前阻塞。使用afterthreading

这是一个小例子:

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事件。