我正在尝试使用某些方法来绑定鼠标动作(按下/未按下)。
我试着在用''按下鼠标按钮时用鼠标来处理鼠标的动作,而用“”来按下鼠标按钮。
我发现当我只有..bind('',somemethod1)时,无论按下鼠标按钮都会调用somemethod1,但是当我也拥有..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)
RecursionError:超过最大递归深度

谁能向我解释为什么会这样?
我知道我可以通过仅在on_button1_motion1方法内调用on_mouse_unpressed_motion1方法而不是生成事件来解决此问题,但我想知道为什么其他方法不起作用。谢谢

最佳答案

它创建了一个无限循环。

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


  <Motion>
  
  在按住鼠标按钮的情况下移动鼠标。
  要指定鼠标左键,鼠标中键或鼠标右键
   <B1-Motion>,>和<B2-Motion
  
  ...


here

关于python - 生成事件时超出了tkinter最大递归深度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37771117/

10-11 01:06