gpt4 book ai didi

python - 生成事件时超出 tkinter 最大递归深度

转载 作者:行者123 更新时间:2023-12-01 03:54:15 25 4
gpt4 key购买 nike

我正在尝试使用某些方法绑定(bind)鼠标运动(按下/未按下)。我尝试在按下鼠标按钮时处理鼠标运动,而按下鼠标按钮则仅按下“”。我发现当我只有 ..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> ,当你得到它时,你会创造更多 <Motion> 当按钮被按下时(因为它仅在捕获button-1事件时生成)。所以你正在生成另一个 <Button1-Motion>事件。因此该函数会再次被调用,依此类推。

<Motion>

The mouse is moved with a mouse button being held down. To specify the left, middle or right mouse button use <B1-Motion>, <B2-Motion> and <B3-Motion> respectively.

...

来自here .

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com