生成事件时超出了 tkinter 的最大递归深度



我正在尝试使用某些方法绑定鼠标动作(按下/未按下)。 我试图处理鼠标移动,而鼠标按钮被按下",另一个只用"按下。 我发现当我只有..bind('',somemethod1),无论是否按下鼠标按钮,都会调用某个方法1,但是当我也有..bind('', somemethod2),按下鼠标按钮时不调用 somemethod1。 添加"add="+"似乎不起作用。

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 行,在主循环中 self.tk.mainloop(n) 递归错误:超出最大递归深度

谁能向我解释为什么会发生这种情况? 我知道我可以通过在方法中调用on_mouse_unpressed_motion1方法而不是生成事件来解决这个问题on_button1_motion1但我想知道为什么另一种方式不起作用。谢谢

它创建了一个无限循环。

您正在侦听<Button1-Motion>,当您获得它时,您会在按下 Button时创建更多<Motion>(因为它仅在捕获 button-1 事件时生成)。因此,您正在生成另一个<Button1-Motion>事件。因此,再次调用该函数,依此类推。

<Motion>

按住鼠标按钮时移动鼠标。 要指定鼠标左键、中键或右键,请使用<B1-Motion><B2-Motion>和<B3-Motion>

从这里。

最新更新