Python tkinter unbind函数不能按我所希望的那样工作

Python tkinter unbind函数不能按我所希望的那样工作,python,events,tkinter,Python,Events,Tkinter,我这里有一些代码: def __GameOver__(self): self.canvas.unbind('<Up>'); #other function --- time.sleep(2) self.canvas.bind('<Up>', func); self.root.after(40,self.GameMainLoop) pass def\uuuu GameOver\uuuuu(自我): 自我。画布。解除

我这里有一些代码:

def __GameOver__(self):

    self.canvas.unbind('<Up>');

    #other function ---

    time.sleep(2)

    self.canvas.bind('<Up>', func);

    self.root.after(40,self.GameMainLoop)
    pass
def\uuuu GameOver\uuuuu(自我):
自我。画布。解除绑定(“”);
#其他功能---
时间。睡眠(2)
self.canvas.bind(“”,func);
self.root.after(40,self.GameMainLoop)
通过

我想要的是,当游戏结束时,玩家不能做任何事情,直到“其他功能”和时间结束。然而,当我在测试时,我发现如果我在画布后继续按下按钮取消绑定(“”)但在画布.bind(“”)之前。在canvas.bind(“”)之后仍然可以接收消息。这不是我想要的。但我找不到其他办法。对函数unbind的理解有错误吗?或者在使用绑定函数之前,是否应该清除类似“事件序列”的内容?

您遇到的问题不是解除绑定,而是睡眠。当您调用sleep时,无法处理任何事件,因此在睡眠结束后,当您的
按钮再次绑定时,事件的处理将完成。考虑解开绑定,然后使用<>代码> 方法进行休眠,然后调用一个绑定密钥的函数。< /P> 这是一个例子。当你按向上键时,标签会改变,当你按按钮时,标签会休眠。在此睡眠期间,up键不起任何作用

import Tkinter as tk
import random

class App():
    def __init__(self):
        self.root = tk.Tk()
        self.label = tk.Label(self.root, text='Bla')
        self.label.pack()
        self.button = tk.Button(self.root, text='Button', command=self.sleep)
        self.button.pack()

        self.root.bind('<Up>', self.func)

        self.root.mainloop()

    def func(self, event):
        self.label.config(text='Up '+str(random.random()))

    def sleep(self):
        self.root.unbind('<Up>')
        self.label.config(text='sleeping')
        self.root.after(2000, self.done_sleeping)

    def done_sleeping(self):
        self.label.config(text='done sleeping')
        self.root.bind('<Up>', self.func)

App()
将Tkinter作为tk导入
随机输入
类App():
定义初始化(自):
self.root=tk.tk()
self.label=tk.label(self.root,text='Bla')
self.label.pack()
self.button=tk.button(self.root,text='button',command=self.sleep)
self.button.pack()
self.root.bind(“”,self.func)
self.root.mainloop()
def func(自身、事件):
self.label.config(text='Up'+str(random.random()))
def睡眠(自我):
self.root.unbind(“”)
self.label.config(text='sleeping')
self.root.after(2000年,self.done\u睡眠)
def done_睡眠(自我):
self.label.config(text='done sleeping')
self.root.bind(“”,self.func)
App()