擅长:python、mysql、java
<p>你的问题有点不清楚,但那可能是因为你不熟悉tkinter的概念。你知道吗</p>
<p>GUI编程就是为队列中的事件提供服务。当事情发生时(按钮单击、窗口调整大小等),事件被添加到队列中。它们由事件循环获取(在tkinter中,这是<code>mainloop()</code>),并且在处理事件时执行绑定到每个事件的任何函数。例如,调整窗口大小时,会将多个事件添加到队列中。如果要在窗口调整大小时运行函数,可以将函数绑定到相应的事件。你知道吗</p>
<p>Tkinter还提供了向队列添加事件的功能。您可以添加实际事件(例如:单击和按键),但也可以指定在特定时间后运行的函数。你知道吗</p>
<p>例如,如果要每10毫秒运行一个函数,可以定义如下函数:</p>
<pre><code>def run_periodically(func):
func()
root.after(10, run_periodically, func)
</code></pre>
<p>当您调用该函数一次时,它将调用传递给它的函数,然后在10毫秒后再次运行自己。例如,要每10毫秒运行<code>foo</code>,您需要调用<code>run_periodically(foo)</code>一次,然后它将每10毫秒运行一次,直到您停止它。你知道吗</p>
<p>如果您的目标是在调整窗口大小时调整小部件的位置,则不需要连续运行自己的函数。相反,您可以绑定到<code><Configure></code>事件,它是调整窗口大小时添加到队列中的事件之一。然后,绑定到事件的函数可以查看窗口的大小并执行适当的操作。你知道吗</p>
<p>大多数情况下,使用<code>grid</code>和<code>pack</code>比使用<code>place</code>更有效、更容易,它们提供了告诉tkinter在窗口大小改变时如何反应的选项。例如,小部件可以保持居中,也可以根据需要进行扩展或收缩。你知道吗</p>
<p>如果您使用的是<code>place</code>,那么它有一些功能来做类似的事情(例如,它支持相对放置和相对宽度和高度),但是在许多情况下,使用<code>place</code>比使用<code>grid</code>或<code>pack</code>需要更多的工作。一开始可能看起来很简单,但是一旦你有了一个复杂的GUI,即使对一个小部件做一点小小的改变,比如改变字体或边框的厚度,也会迫使你对其他小部件做一些改变。你知道吗</p>