我正在尝试使用某些方法绑定鼠标动作(按下/未按下)。 我试图处理鼠标移动,而鼠标按钮被按下",另一个只用"按下。 我发现当我只有..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>
。。
从这里。