Я пытаюсь переместить часть своего кода пользовательского интерфейса в класс, а затем вызвать его пару раз для создания разных экранов.Есть внешний кадр, в который я упаковываю эти экраны, и у меня есть несколько навигационных кнопок, чтобы забыть / упаковать кадры, чтобы показывать только по одному за раз.
Однако, pack_forget () на самом деле не скрываетсячто-нибудь.Даже если я немедленно запакую кадр .pack (), а затем .pack_forget (), он все еще там.
Я смог использовать grid_forget (), чтобы сделать это аналогично в более ранней версии, но я предпочел предпочесть.pack и хотите конвертировать.
Спасибо!
import tkinter as tk
class Window(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
# first screen
self.screen_01 = tk.Frame(master)
self.screen_01.pack(fill = tk.BOTH, expand = 1)
self.screen_01.configure(background = "yellow")
# screen nav menu
self.screen_01_nav_frame = tk.Frame(self.screen_01)
self.screen_01_nav_frame.pack(fill = tk.X)
self.screen_01_nav_frame.configure(background = "orange")
#screen twin text areas
self.screen_01_double_text_frame = tk.Frame(self.screen_01)
self.screen_01_double_text_frame.pack(fill = tk.X)
self.screen_01_double_text_frame.configure(background = "brown")
# screen single text area
self.screen_01_single_text_frame = tk.Frame(self.screen_01)
self.screen_01_single_text_frame.pack(fill = tk.BOTH)
self.screen_01_single_text_frame.configure(background = "pink")
# Labels & buttons packed into frame 1a of frame 1
self.label1a1 = tk.Label(self.screen_01_nav_frame, text = "label1", width = 20, height = 2)
self.label1a1.config(bg = "green")
self.label1a1.pack(side = tk.LEFT)
self.label1a2 = tk.Label(self.screen_01_nav_frame, text = "label2", width = 20, height = 2)
self.label1a2.config(bg = "green")
self.label1a2.pack(side = tk.LEFT)
self.label1a3 = tk.Label(self.screen_01_nav_frame, text = "label3", width = 20, height = 2)
self.label1a3.config(bg = "green")
self.label1a3.pack(side = tk.LEFT)
self.label1a4 = tk.Label(self.screen_01_nav_frame, text = "label4", width = 20, height = 2)
self.label1a4.config(bg = "green")
self.label1a4.pack(side = tk.LEFT)
# two text areas packed into frame 1b of frame 1
self.text1b1 = tk.Text(self.screen_01_double_text_frame, wrap=tk.WORD, bg="blue", bd=2, relief = "ridge", height = 20)
self.text1b1.pack(side = tk.LEFT, fill = tk.X, expand=1)
self.text1b1.delete(1.0, tk.END)
self.text1b1.insert(tk.END,"Frame 1 text area 1\n")
self.text1b2 = tk.Text(self.screen_01_double_text_frame, wrap=tk.WORD, bg="blue", bd=2, relief = "ridge", height = 20)
self.text1b2.pack(side = tk.LEFT, fill = tk.X, expand=1)
self.text1b2.delete(1.0, tk.END)
self.text1b2.insert(tk.END,"Frame 1 text area 2\n")
# two text areas packed into frame 1b of frame 1
self.text1c = tk.Text(self.screen_01_single_text_frame, wrap=tk.WORD, bg="white", bd=2, relief = "ridge", height = 20)
self.text1c.pack(side = tk.LEFT, fill = tk.BOTH, expand=1)
self.text1c.delete(1.0, tk.END)
self.text1c.insert(tk.END,"Frame 1 text area 2\n")
def switch_mode(display_window):
print(display_window)
for window in [main_GUI.window1, main_GUI.window2]:
window.pack_forget()
display_window.pack()
# init GUI
class GUI:
def __init__(self, master):
self.autorun = 0
self.master = master
# weighting
pixel = tk.PhotoImage(width=1, height=1)
class NavButton(tk.Button):
def __init__(self, *args, **kwargs):
tk.Button.__init__(self, *args, **kwargs)
self['bg'] = "#0070FF"
self['image'] = pixel
self['height'] = 45
self['compound'] = 'c'
self['fg'] = 'white'
self['font'] = ('bold', '11')
# outermost frame
self.top_nav_frame = tk.Frame(master)
self.top_nav_frame.pack(fill = tk.X)
self.top_nav_frame.configure(background = "black")
# top nav menu
self.screen1_btn = NavButton(self.top_nav_frame, text="Startup", command = lambda : switch_mode(self.window1))
self.screen1_btn.config(bg = "darkblue")
self.screen1_btn.pack(side = tk.LEFT, expand=1, fill = tk.X)
self.screen2_btn = NavButton(self.top_nav_frame, text="Manage DCF", command = lambda : switch_mode(self.window2))
self.screen2_btn.config(bg = "darkblue")
self.screen2_btn.pack(side = tk.LEFT, expand=1, fill = tk.X)
self.label0c = tk.Label(self.top_nav_frame, text = "0c", height = 2)
self.label0c.config(bg = "darkblue")
self.label0c.pack(side = tk.LEFT, expand=1, fill = tk.X)
self.label0d = tk.Label(self.top_nav_frame, text = "0d", height = 2)
self.label0d.config(bg = "darkblue")
self.label0d.pack(side = tk.LEFT, expand=1, fill = tk.X)
# create the windoes from the window class
self.window1 = Window(master)
self.window2 = Window(master)
# forget doesn't even work if I call it directly on a window right after I create it
self.window1.pack_forget()
root = tk.Tk()
main_GUI = GUI(root)
root.mainloop()