使用time.sleep的Tkinter Canvas STATE的奇怪行为

时间:2013-03-02 22:25:04

标签: python tkinter sleep

我有一个名为_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得到这种奇怪的行为?

1 个答案:

答案 0 :(得分:0)

time.sleep()不会阻止事件被接受,它只是阻止它们被处理。每当您在应用程序处于休眠状态时单击,事件就会被添加到队列中,并在睡眠完成后进行处理。

你几乎从不在GUI中调用sleep。你应该做的是将状态设置为禁用,然后安排重置状态十秒钟:

def re_enable(self):
    self._their_grid.config(state=NORMAL)
...
self.after(10000, self.re_enable)