我有一个名为_their_grid的Canvas,它有许多与鼠标点击相关的关联事件。我在一定条件下禁用它10秒钟。以下是相关代码。
print "not your turn"
# disable opponent's grid during their turn
self._their_grid.config(state=DISABLED)
time.sleep(10)
self._their_grid.config(state=NORMAL)
print "now you can go"
然而,在十秒睡眠期间,我仍然设法触发事件。这不应该是这种情况,因为state = DISABLED应该关闭所有事件。下面的代码,睡眠被注释掉,会停止所有事件。
print "not your turn"
# disable opponent's grid during their turn
self._their_grid.config(state=DISABLED)
#time.sleep(10)
#self._their_grid.config(state=NORMAL)
#print "now you can go"
为什么我用time.sleep得到这种奇怪的行为?
答案 0 :(得分:0)
time.sleep()不会阻止事件被接受,它只是阻止它们被处理。每当您在应用程序处于休眠状态时单击,事件就会被添加到队列中,并在睡眠完成后进行处理。
你几乎从不在GUI中调用sleep。你应该做的是将状态设置为禁用,然后安排重置状态十秒钟:
def re_enable(self):
self._their_grid.config(state=NORMAL)
...
self.after(10000, self.re_enable)