Я хочу иметь возможность изменить меню на неактивное во время LoginPage
, но затем стать активным после NextPage
, есть ли способ сделать это извне класса Application
?
import tkinter as tk
from tkinter import ttk
class Application(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
window = tk.Frame(self)
window.pack(side="top", fill="y", expand=True)
self.menu = tk.Menu(window)
file_menu = tk.Menu(self.menu, tearoff=0)
file_menu.add_command(label="Temp")
file_menu.add_separator()
file_menu.add_command(label="Exit", command=quit)
self.menu.add_cascade(label="File", menu=file_menu)
tk.Tk.config(self, menu=self.menu)
# Disable the menu for LoginPage
self.disable_menu("File")
self.frames = {}
for frames in (LoginPage, NextPage):
frame = frames(window, self)
self.frames[frames] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(LoginPage)
def enable_menu(self, sub_menu):
self.menu.entryconfig(sub_menu, state="normal")
def disable_menu(self, sub_menu):
# Can this function be called from the class NextPage to disable the menu when not logged in?
self.menu.entryconfig(sub_menu, state="disabled")
def show_frame(self, controller):
frame = self.frames[controller]
frame.tkraise()
class LoginPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
button = ttk.Button(self, text="Next Page", command=lambda: controller.show_frame(NextPage))
button.pack()
class NextPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
# Enable menu bar here after logged in
label = ttk.Label(self, text="Temporary")
label.pack()
application = Application()
application.mainloop()
Я пробовал: Application.disable_menu(self, sub_menu="File")
в классе NextPage
, но там написано, что 'NextPage' object has no attribute 'menu'
, есть ли способ заставить это работать?