ОБНОВЛЕНИЕ: проблема была решена удалением window.mainloop () в моей второй функции.
Я пытаюсь сделать игру на Python 3.7, используя tkinter.
Игра начинается с меню (кнопки-виджеты в рамке). Нажатие на кнопку «Воспроизвести» должно открыть другое меню, используя другой кадр. Это второе меню должно содержать кнопку «назад» для возврата в первое меню.
Каждое меню определено в функции. Таким образом, чтобы перейти из главного меню в меню воспроизведения , я вызываю функцию playMenu (окно) в функции, используемой в качестве команды кнопкой «Play».
Это выглядит так:
def clickButtonPlay():
menuFrame.grid_remove()
playMenu(window)
menuFrame.grid()
В меню воспроизведения функция, используемая в качестве команды «кнопка назад», положила конец функции, уничтожив ее кадр и использовав возврат.
Таким образом, программа должна вернуться к функции clickButtonPlay () и показать кадр главного меню обратно, но вместо этого я получаю ошибку tkinter:
_tkinter.TclError: не может вызвать команду "grid": приложение было уничтожено
Но мой фрейм menuFrame не был уничтожен, просто без сетки!
Может кто-нибудь помочь мне понять, что не так с кодом, или найти более простой способ сделать то же самое?
Большое спасибо!
Вот пример работы моей программы:
Файл главного меню:
import tkinter as tk
from PlayMenu import playMenu
window = tk.Tk()
window.grid()
def menu(window):
def clickButtonPlay():
menuFrame.grid_remove()
playMenu(window)
menuFrame.grid()
menuFrame = tk.Frame(window)
menuFrame.grid()
background = tk.Label(menuFrame, image= backgroundImage)
background.grid()
playButton = tk.Button(menuFrame, image= playButtonImage[0], command= clickButtonPlay)
playButton.place(relx= 0.5, rely= 0.15)
window.mainloop()
menu(window)
Файл playMenu:
class MyError(Exception):
pass
def _playMenu(window):
def clickButtonBack():
playMenuFrame.destroy()
raise MyError
playMenuFrame = tk.Frame(window)
playMenuFrame.grid()
background = tk.Label(playMenuFrame, image= backgroundImage)
background.grid()
backButton = tk.Button(playMenuFrame, image= backButtonImage[0], command= clickButtonBack)
backButton.place(relx=0.375, rely=0.8)
window.mainloop()
def playMenu(window):
try:
return _playMenu(window)
except MyError:
return