【发布时间】:2015-02-20 22:19:36
【问题描述】:
我已经在我正在开发的应用程序上苦苦挣扎了一段时间。经过数小时尝试调试界面锁定且无法发生其他任何事情的问题后,我发现这是可怕的 While 循环。请参阅下面的示例并运行它。当您通过单击按钮启动 while 循环时,您无法在屏幕上执行任何其他操作。在这种情况下,它只是一个需要按下的简单警报按钮。
from Tkinter import *
import tkMessageBox
root = Tk()
root.geometry("450x250+300+300")
root.title("Raspberry PI Test")
def myloop():
count = 0
while (count < 500):
print 'The count is:', count
count = count + 1
print "Good bye!"
def mymessage():
tkMessageBox.showinfo(title="Alert", message="Hello World!")
buttonLoop = Button(root, text="Start Loop", command=myloop)
buttonLoop.place(x=5, y=15)
buttonMessage = Button(root, text="Start Loop", command=mymessage)
buttonMessage.place(x=85, y=15)
root.mainloop()
如何让一个循环在计数完成之前一直运行,并且仍然能够在我的应用程序中执行其他任务?我还应该注意,我已经使用 Thread 尝试过同样的事情,但这并不重要。 UI 仍在等待 While 循环结束,然后您才能执行任何操作。
【问题讨论】:
-
如果您使用线程则不会...所以我不确定您尝试使用线程是什么意思
-
好吧,如果您 等待 让您的线程返回,那么是的,这会像内联那样阻塞。不幸的是,我对 TK 不熟悉(我怀疑它的存货不是很漂亮);也许您可以在设置 TK event loop 时使用一些帮助,这应该可以让您在不使用子进程/线程的情况下实时处理和处理 UI 事件。我认为线程模块可能会对多核主机的性能造成重大影响,但这可能仅适用于 c 扩展。