Неизвестная рекурсия из-за которой крашится приложение на tkinter
Я пытался написать небольшое приложение, вернее его часть, суть которого-типа упрощенный Paint, есть поле, в котором можно рисовать, на ЛКМ рисуешь черным цветом, на ПКМ-белым(можно стирать то, что нарисовано черным). Но в какой то момент при рисовании, иногда раньше, иногда позже, приложение крашится с ошибкой-превышение максимальной глубины рекурсии, хотя рекурсий у меня в коде нет. Возможно это происходит из за библиотеки, но я к сожалению не очень знаком с tkinter...
Код:
from tkinter import *
from PIL import Image, ImageDraw
import numpy as np
window = Tk()
# Размеры холста
canvas_width = 560
canvas_height = 560
canvas = Canvas(window, width=canvas_width, height=canvas_height)
canvas.pack()
image = Image.new("L", (canvas_width, canvas_height), 0)
draw = ImageDraw.Draw(image)
def on_mouse_down(event):
global is_right_button_pressed
is_right_button_pressed = (event.num == 3)
global last_x, last_y
last_x = event.x
last_y = event.y
def on_mouse_move(event):
x = event.x
y = event.y
color = "white" if is_right_button_pressed else "black"
outline_color = "white" if is_right_button_pressed else "black"
radius = 50 if is_right_button_pressed else 40 # Радиус окружности
x1 = x - radius
y1 = y - radius
x2 = x + radius
y2 = y + radius
canvas.create_oval(x1, y1, x2, y2, fill=color, outline=outline_color)
window.update()
canvas.bind("<Button-1>", on_mouse_down)
canvas.bind("<Button-3>", on_mouse_down)
canvas.bind("<B1-Motion>", on_mouse_move)
canvas.bind("<B3-Motion>", on_mouse_move)
window.mainloop()
Ошибка:
Traceback (most recent call last):
File "C:\Program Files\Python311\Lib\tkinter\__init__.py", line 1947, in __call__
args = self.subst(*args)
^^^^^^^^^^^^^^^^^
File "C:\Program Files\Python311\Lib\tkinter\__init__.py", line 1649, in _substitute
e.type = EventType(T)
^^^^^^^^^^^^
File "C:\Program Files\Python311\Lib\enum.py", line 711, in __call__
return cls.__new__(cls, value)
^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\Python311\Lib\enum.py", line 1101, in __new__
return cls._value2member_map_[value]
^^^^^^^^^^^^^^^^^^^^^^
RecursionError: maximum recursion depth exceeded while calling a Python object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\PycharmProjects\Digit-Recognition\main.py", line 83, in <module>
window.mainloop()
File "C:\Program Files\Python311\Lib\tkinter\__init__.py", line 1485, in mainloop
self.tk.mainloop(n)
File "C:\Program Files\Python311\Lib\tkinter\__init__.py", line 1952, in __call__
self.widget._report_exception()
File "C:\Program Files\Python311\Lib\tkinter\__init__.py", line 1668, in _report_exception
root.report_callback_exception(exc, val, tb)
File "C:\Program Files\Python311\Lib\tkinter\__init__.py", line 2402, in report_callback_exception
print("Exception in Tkinter callback", file=sys.stderr)
RecursionError: maximum recursion depth exceeded while calling a Python object
Process finished with exit code 1
Источник: Stack Overflow на русском