Как вернуться обратно в меню tkinter Python?
Написал код, при открытие которого появляется меню с кнопкой сообщения:
from tkinter import *
def message():
destroy_object = [btn_msg]
for object_name in destroy_object:
object_name.destroy()
lbl.configure(text='Сообщения')
btn_back = Button(window, text='Назад')
btn_back.grid(column=0, row=1)
window = Tk()
window.title('Тест')
window.attributes('-fullscreen', True)
lbl = Label(window, text='Меню')
lbl.grid(column=0, row=0)
btn_msg = Button(window, text='Сообщения', command=message)
btn_msg.grid(column=0, row=1)
window.mainloop()
При нажатии на кнопку все перерисовывается и переходит якобы в раздел сообщения где есть кнопка назад, как сделать так, что бы при нажатии на кнопку назад выходило из функции и появлялся прежний вид меню? Я пробовал меню заносить в функцию:
from tkinter import *
def message():
destroy_object = [btn_msg]
for object_name in destroy_object:
object_name.destroy()
lbl.configure(text='Сообщения')
btn_back = Button(window, text='Назад')
btn_back.grid(column=0, row=1)
def menu():
lbl = Label(window, text='Меню')
lbl.grid(column=0, row=0)
btn_msg = Button(window, text='Сообщения', command=message)
btn_msg.grid(column=0, row=1)
window = Tk()
window.title('Тест')
window.attributes('-fullscreen', True)
menu()
window.mainloop()
но выдавало ошибку NameError
Подскажите как реализовать данную идею? Заранее спасибо
Ответы (1 шт):
Для реализации вашей идеи лучше использовать классы, вместо функций.
from tkinter import *
import tkinter
class MainMenu():
def __init__(self,tk,tk_title):
def messages(event):
self.tk.destroy()
Messages(tkinter.Tk(), 'Сообщения')
self.tk = tk
self.tk.title(tk_title)
self.tk.attributes('-fullscreen', True)
self.lbl = Label(self.tk, text='Меню')
self.lbl.grid(column=0, row=0)
self.btn_msg = Button(self.tk, text='Сообщения')
self.btn_msg.grid(column=0, row=1)
self.btn_msg.bind('<Button-1>', messages)
self.tk.mainloop()
class Messages():
def __init__(self, tk, tk_title):
def back(event):
self.tk.destroy()
MainMenu(tkinter.Tk(), 'Меню')
self.tk = tk
self.tk.title(tk_title)
self.tk.attributes('-fullscreen', True)
self.lbl = Label(self.tk, text='Сообщения')
self.lbl.grid(column=0, row=0)
self.btn_back = Button(self.tk, text='Назад')
self.btn_back.grid(column=0, row=1)
self.btn_back.bind('<Button-1>', back)
self.tk.mainloop()
MainMenu(tkinter.Tk(), 'Меню')
self - означает, что объект принадлежит конкретному классу и может использоваться только в нем
Если вам принципиально делать через функции, то вам нужно объявить компоненты, а затем в функциях, изменять их значения и параметры:
from tkinter import *
def message():
global lbl, btn
lbl['text'] ='Сообщения'
btn['text'] = 'Назад'
btn['command'] = menu
def menu():
global lbl, btn
lbl.['text'] = 'Меню'
btn['text'] = 'Сообщения'
btn['command'] = message
window = Tk()
window.title('Тест')
window.attributes('-fullscreen', True)
btn = Button(window, text='Сообщения', command=message)
btn.grid(column=0, row=1)
lbl = Label(window, text='Меню')
lbl.grid(column=0, row=0)
menu()
window.mainloop()