【发布时间】:2015-04-27 14:27:55
【问题描述】:
我在 python 中有一个小应用程序,除了这个小问题外,它运行良好:它应该连续运行一个循环,直到用户通过按钮告诉它停止,但是当我点击开始按钮时,Windows 告诉我它不是回应。现在,如果我编写一个简单的打印语句,一切正常:
def update(self):
self.bStart.config(state = 'disabled')
self.bStop.config(state = 'active')
self.running = True
self.toRun = True
while self.toRun:
[...do some stuff...]
time.sleep(self.toWait)
print("i'm alive")
但是,如果没有 print 语句,它只会冻结并进入“不响应”状态,我正在徘徊是否有办法防止这种情况发生。
【问题讨论】:
-
如果你在 tkinter,为什么你使用 time.sleep() 而不是坐在你的 app.mainloop() 中?
-
您几乎不应该致电
time.sleep,因为它确实会阻止您的应用响应。 -
@BryanOakley 在这种情况下我可以使用什么作为替代方案,这会使 tkinter 等待一段时间?
-
@KGS:在基于事件的程序中,它总是在等待。您不需要添加人工等待。如果你想在一段时间后做某事,你可以调用一个widget的
after方法来触发以后的功能。 -
@BryanOakley 就我而言,我在画布上有一些用户输入;当按下
start按钮时,画布开始不断更新自身,使用每次更新的结束状态作为下一次更新的起点,循环直到按下stop按钮。然而,如果没有等待时间,这一切都发生得太快了,用户应该在发生变化时观察它们,所以time.wait()似乎是一个非常好的主意,因为我可以包含一个滑块来配置一切的速度去。我读了一些关于after方法的内容,它似乎没有相同的目的