<p>因此,tkinter中不断更新某些内容的主要问题是,至少对于大多数程序来说,您被锁定在主循环中。你知道吗</p>
<p>出于所有目的,这基本上意味着在程序中,您永远不会真正调用最后一行,因为Python正在等待主循环结束。你知道吗</p>
<p>我们解决这个问题的方法是,正如您正确推测的那样,使用<code>after()</code>函数。如果您还不知道如何使用它(并计划继续使用tkinter),那么您一定要将它添加到您的工具箱中。你知道吗</p>
<hr/>
<p>首先,我对你的程序做了一个快速的修改,这样我就可以得到一个返回的温度值。我这样做是为了演示如何更新文本小部件,其中包括添加一个只返回随机值的新函数。你知道吗</p>
<pre><code>import tkinter as tk
import random
def read_current_Temperature():
return random.randint(1, 100)
HEIGHT = 300
WIDTH = 500
root = tk.Tk()
canvas = tk.Canvas(root, height = HEIGHT, width = WIDTH)
canvas.pack()
aktTemp = tk.Label(root, text=str(read_current_Temperature())+"°C", fg="red")
aktTemp.pack()
root.mainloop()
read_current_Temperature()
</code></pre>
<p>现在,正如您看到的,当我们运行上面的程序时,我们得到的结果基本上与您原来的程序相同。温度是<em>读取</em>(读取:随机生成),然后小部件被更新,然后。没什么别的了。你知道吗</p>
<hr/>
<p>所以,首先我们需要找到在哪里使用<code>after()</code>。有很多方法可以做到这一点,但最简单的方法(主观上,在这个例子中)。在可能的情况下,我建议改用<code>class</code>来添加新函数,如下所示:</p>
<pre><code>import tkinter as tk
import random
def read_current_Temperature():
return random.randint(1, 100)
def update():
aktTemp.config(text=str(read_current_Temperature())+"°C")
aktTemp.after(1000, update)
HEIGHT = 300
WIDTH = 500
root = tk.Tk()
canvas = tk.Canvas(root, height = HEIGHT, width = WIDTH)
canvas.pack()
aktTemp = tk.Label(root, text=str(read_current_Temperature())+"°C", fg="red")
aktTemp.pack()
update()
root.mainloop()
</code></pre>
<p>让我们一行一行地看这个。你知道吗</p>
<hr/>
<pre><code>update()
</code></pre>
<p>我们遇到的第一个新行(运行时,而不是阅读时)是对我定义的新函数的调用,说到这个函数。你知道吗</p>
<pre><code>def update():
aktTemp.config(text=str(read_current_Temperature())+"°C")
aktTemp.after(1000, update)
</code></pre>
<p>这个函数的第一行。你知道吗</p>
<pre><code> aktTemp.config(text=str(read_current_Temperature())+"°C")
</code></pre>
<p>。只是告诉程序去获取新的温度,并将其指定为label小部件的<code>text</code>属性<code>aktTemp</code>。这是<strong>在GUI中实际进行更改的行。你知道吗</p>
<p>另一方面,这条线。你知道吗</p>
<pre><code> aktTemp.after(1000, update)
</code></pre>
<p>。是上面提到的<code>after</code>的用法。所有这些都是说“每1000毫秒,调用函数<code>update()</code>”,正如我们从上面所知道的那样,它会将标签更新为新的温度,并在再次调用自身之前启动另一个1000毫秒的延迟。你知道吗</p>
<hr/>
<p><a href="https://effbot.org/tkinterbook/widget.htm#Tkinter.Widget.after-method" rel="nofollow noreferrer">You can read more about ^{<cd1>} here.</a></p>