我试图用一些方法绑定鼠标运动(按下/未按下)。 我试图处理鼠标的动作,而鼠标按钮用''键和另一只用''键。 我发现,当我刚刚有..bind('',somemethod1),somemethod1被称为不管鼠标按钮按下,但是当我也有..bind('',somemethod2),somemethod1不被称为鼠标按钮时按下。 添加'add ='+''似乎不起作用。tkinter最大递归深度超过生成事件
def bind_mouse(self):
self.canvas.bind('<Button1-Motion>', self.on_button1_motion1)
self.canvas.bind('<Motion>', self.on_mouse_unpressed_motion1)
def on_button1_motion1(self, event):
print(self.on_button1_motion1.__name__)
def on_mouse_unpressed_motion1(self, event):
print(self.on_mouse_unpressed_motion1.__name__)
所以我代替修改为以下on_button1_motion1方法:
def on_button1_motion1(self, event):
print(self.on_button1_motion1.__name__)
self.canvas.event_generate('<Motion>')
但是,当我尝试这样做,我得到这个运行时错误:
回溯(最近通话最后一个): 文件“D:/ save/WORKSHOP/py/tkinter/Blueprints/Pycrosoft Paintk/view.py”,第107行,在 root.mainloop() 文件“C:\ Users \ smj \ AppData \ Local \ Programs \ Python \ Python35 \ lib \ tkinter__init __。py“,第1131行,在mainloop中 self.tk.mainloop(n) 递归错误:超过最大递归深度
任何人都可以向我解释为什么会发生这种情况吗? 我知道我可以通过调用on_button1_motion1方法内的on_button1_motion1方法而不是生成事件来解决此问题,但我想知道为什么其他方式不起作用。谢谢
嗯,你的意思是当我在听''Button1-Motion>'事件时创建''事件,on_button1_motion1因为“侦听寄存器”而被调用?有趣。我从来不知道这一点。 –
当侦听该事件的命令(方法)执行时(返回之前)是否“侦听”? –
对不起,我犯了一个错误:''并不总是触发''的回调。我重新创建了你的程序并发现了相同的行为。问题在于当按钮已经被按下时产生''事件**产生另一个''事件(因为按钮被按下并且你正在产生Motion!)。回答最后一个问题:是的,在执行回调函数'on_button1_motion1'时,小部件仍在侦听更多事件,并且在按下按钮时又创建了另一个''事件,因此它是'< Button1的迅>”。 –
krork