Tkinter - RuntimeError: превышена максимальная глубина рекурсии
Я начал программировать на Python в понедельник. Я с удовольствием изучал это. Но я застрял, пытаясь понять, как избежать рекурсии при переключении между меню tkinter! Я уверен, что это очень простой вопрос, и я ценю, что вы терпите мое невежество по этому вопросу, но я не смог найти ответ в другом месте.
Что я сейчас делаю, так это, в конце концов, выдает мне ошибку: RuntimeError: максимальная глубина рекурсии превышена при вызове объекта Python
Это шаблон, который я сейчас использую. ОБНОВЛЕНО: приведенный ниже код теперь является полной изолированной копией, воспроизводящей проблему, с которой я столкнулся! : D
<code>from tkinter import * def mainmenu(): global frame, root frame.destroy() frame = Frame() frame.pack() button1 = Button(frame, text="anothermenulikethis", command = anothermenulikethis) button2 = Button(frame, text="anothermenulikethis", command = anothermenulikethis) button3 = Button(frame, text="mainmenu", command = mainmenu) button1.pack(side=LEFT) button2.pack(side=LEFT) button3.pack(side=LEFT) root.mainloop() def anothermenulikethis(): global frame, root frame.destroy() frame = Frame() frame.pack() button1 = Button(frame, text="mainmenu", command = mainmenu) button2 = Button(frame, text="mainmenu", command = mainmenu) button3 = Button(frame, text="anothermenulikethis", command = anothermenulikethis) button1.pack(side=LEFT) button2.pack(side=LEFT) button3.pack(side=LEFT) root.mainloop() root = Tk() root.title("Recursive Menu Problem Isolation") root.geometry("1200x600") frame = Frame() mainmenu() </code>
И все это прекрасно работает, пока его неизбежный отказ от максимальной глубины рекурсии. Если кто-то может предложить лучший способ сделать что-то или у него есть ссылка на пример лучшего способа сделать это, я очень хочу учиться.
PS: я смотрел и пытался увеличить глубину рекурсии, но я чувствую, что это решение бедного человека, что является фундаментальной проблемой моего подхода.
Спасибо всем заранее.
Как и просили, вот трассировка:
<code>Exception in Tkinter callback Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/tkinter/__init__.py", line 1399, in __call__ return self.func(*args) File "/Users/diligentstudent/Desktop/menutest.py", line 11, in mainmenu button1 = Button(frame, text="anothermenulikethis", command = anothermenulikethis) File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/tkinter/__init__.py", line 2028, in __init__ Widget.__init__(self, master, 'button', cnf, kw) File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/tkinter/__init__.py", line 1958, in __init__ (widgetName, self._w) + extra + self._options(cnf)) File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/tkinter/__init__.py", line 1043, in _options v = self._register(v) File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/tkinter/__init__.py", line 1079, in _register f = CallWrapper(func, subst, self).__call__ RuntimeError: maximum recursion depth exceeded </code>