擅长:python、mysql、java
<p>正如sqall指出的,要更改<code>StringVar</code>值,需要使用其<code>set()</code>方法。在</p>
<p>另一方面,Tk变量的目的是跟踪它们所连接的小部件的值。您应该选择使用<code>StringVar</code>而不是直接读取小部件的值的原因是后者是线程安全的。在</p>
<p>线程安全对于tkinter来说有点棘手,但从技术上讲,您不应该被允许在与创建窗口的线程不同的线程中对GUI元素进行修改(即,原始线程被阻塞在<code>mainloop()</code><strong>加上您定义的回调)。在</p>
<p>如果您有一个额外的后台线程,该线程使用<code>country.set("hello")</code>指令来详细说明数据并相应地更改UI,则可能会使应用程序崩溃。有些制度完全禁止这样做。在</p>
<p>同时,在<code>StringVar</code>中设置值是非常安全的。在</p>
<p>如果您从不使用其他线程,并且可以单独从回调中工作,那么您将永远不会遇到这个问题,并且您可能会认为<code>StringVar</code>是一个无用的开销。但是,任何严肃的工作都需要使用变量。在</p>