我有一个功能(A),该功能绑定到Canvas上的click事件。在某个时候,函数A调用另一个函数(B)。画布内容可能会在函数B中更改,因此我希望它在运行时忽略画布单击事件。我试过设置一个布尔变量,该布尔变量在调用函数B之前将函数A调用为False时进行检查,然后在完成函数B时将其重置为True,但是该事件仍会因新内容的鼠标坐标错误而排队。我尝试将画布单击事件重新绑定到仅返回“ break”的函数(C),然后调用函数B,然后将画布单击事件重新绑定回函数A。对于新内容,鼠标坐标仍然很差。我试过将画布状态设置为“禁用”,然后调用函数B,然后将状态设置为“正常”。我试过从函数A,函数B和两者返回“ break”。我得到相同的结果,它仍然在新内容的鼠标坐标不好的情况下排队。有什么建议吗?
我在当前状态下用于测试选项的代码:
import time
from tkinter import *
class test_form(object):
def __init__(self, master):
self.master = master
self._CreateGUI()
def _CreateGUI(self):
geom = "200x175+0+0"
self.master.geometry(geom)
self.xx=Canvas(bg='#ff0000',width=100,height=75)
self.xx.bind('<ButtonRelease>',self.test_button)
self.xx.pack()
def waste_time(self):
print('time wasted')
time.sleep(10)
return "break"
def test_button(self,event=None):
self.waste_time()
return "break"
def start_gui():
root = Tk()
form_load = test_form(root)
root.mainloop()
if __name__ == "__main__":
start_gui()
答案 0 :(得分:0)
以下方法似乎可以解决您的问题。可能与您已经尝试过的类似,但有一个after()
插入:
class test_form(object):
def __init__(self, master):
self.master = master
self._CreateGUI()
def _CreateGUI(self):
geom = "200x175+0+0"
self.master.geometry(geom)
self.xx = Canvas(bg='#ff0000', width=100, height=75)
self.xx.pack()
self.notice()
def waste_time(self):
print('time wasted')
time.sleep(10)
def notice(self):
self.xx.bind('<ButtonRelease>', self.test_button)
def ignore(self):
self.xx.bind('<ButtonRelease>', lambda event: "break")
def test_button(self, event):
self.ignore()
self.waste_time()
self.master.after(500, self.notice)