擅长:python、mysql、java
<p>显示字符串的适当小部件是<a href="http://effbot.org/tkinterbook/label.htm" rel="nofollow">Label</a>。{1>可以在运行时使用文本更改方法:</p>
<pre><code>self.progress = Label(...)
...
self.progress.configure(text="%s%% completed" % percent)
</code></pre>
<p>第二,创建两个根窗口-<code>admin</code>和{<cd3>}。奇怪的是,你把列表框放在一个里,按钮放在另一个里。Tk并不是设计成那样工作的。第三,需要调用根窗口的mainloop方法(例如:<code>Admin.mainloop</code>)</p>
<p>最后,对于您的评论<code>update_idletasks</code>不起作用,请定义为“不起作用”。它实际上会更新显示。它不会让你在窗口运行时与它交互。在</p>
<p>我根据上面的注释对代码进行了修改(只创建了一个根,使用了<code>Label</code>而不是<code>Listbox</code>,并使用了<code>update_idletasks</code>,程序运行到完成,下载了这首歌。在</p>
<p>调用<code>update</code>的危险在于:如果在下载时单击“下载”按钮会怎样?下一次调用<code>update</code>时,该按钮将被服务。在该事件的服务中,您将进入一个无限循环。当内部无限循环运行时,外部循环无法运行。您将有效地冻结了第一次下载。在</p>
<p>正确的解决方案包括(至少)两种技术中的一种。第一,创建一个线程来进行下载,并让它定期将信息发送回主循环,以便它可以更新进度条。第二种方法是利用已经存在的无限循环event loop,通过使用<code>after</code>将作业放入事件队列中,一次读取一个块。在</p>
<p>互联网上有两种方法的例子。在</p>