Неизвестная рекурсия из-за которой крашится приложение на tkinter

Рейтинг: 2Ответов: 0Опубликовано: 26.06.2023

Я пытался написать небольшое приложение, вернее его часть, суть которого-типа упрощенный 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

Ответы

Ответов пока нет.