Python Tkinter pack.forget () проблема - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь переместить часть своего кода пользовательского интерфейса в класс, а затем вызвать его пару раз для создания разных экранов.Есть внешний кадр, в который я упаковываю эти экраны, и у меня есть несколько навигационных кнопок, чтобы забыть / упаковать кадры, чтобы показывать только по одному за раз.

Однако, 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...