1

私は _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"

ただし、10 秒間のスリープ中に、イベントをトリガーすることができます。state=DISABLED はすべてのイベントを遮断する必要があるため、これは当てはまりません。以下のコードは、sleep をコメントアウトして、すべてのイベントを停止します。

        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 でこの奇妙な動作が発生するのはなぜですか?

4

1 に答える 1

0

time.sleep()は、イベントの受け入れを妨げるのではなく、単にイベントの処理を妨げるだけです。アプリのスリープ中にクリックするたびに、イベントはキューに追加され、スリープが終了すると処理されます。

GUIでsleepを呼び出すことはほとんどありません。代わりに、状態を無効に設定してから、10秒後に状態をリセットするようにスケジュールします。

def re_enable(self):
    self._their_grid.config(state=NORMAL)
...
self.after(10000, self.re_enable)
于 2013-03-03T00:01:15.720 に答える