Python两个Tkinter Widgets在完全相同的位置

时间:2018-04-24 07:29:34

标签: python python-3.x user-interface tkinter grid

有没有办法在完全相同的位置放置两个帧?但只有一个是可见的。

我试过这样:

def open_one(event):
    Frame2.grid_forget()       
    Frame1.grid(column=1,row=2,rowspan=3,sticky=W, padx = 50)
def open_two(event):
    Frame1.grid_forget()
    Frame2.grid(column=1,row=2,rowspan=3,sticky=W, padx = 50)

但是网格管理器在网格中保留了彼此相邻的空间,而我现在所有其他小部件都处于错误的位置。

1 个答案:

答案 0 :(得分:0)

如下所示,您可以使用grid_forget删除tk.Frame并将其替换为另一个:

import tkinter as tk


class Display(tk.Frame):

    def __init__(self, parent, color):
        super().__init__(parent, bg=color, width=100, height=100)
        tk.Label(self, text=color).pack(padx=50, pady=50)


class App(tk.Tk):

    def __init__(self):
        super().__init__()
        self.displays = [Display(self, 'cyan'), Display(self, 'green')]
        self.showing_counter = 0
        self.displays[self.showing_counter].grid(row=0, column=0)

        self.swap_frames_btn = tk.Button(self, text='swap', command=self.swap_displays)
        self.swap_frames_btn.grid(row=1, column=0)
        self.mainloop()

    def swap_displays(self):
        """replace a frame with another"""
        self.displays[self.showing_counter].grid_forget()
        self.showing_counter = (self.showing_counter + 1) % 2
        self.displays[self.showing_counter].grid(row=0, column=0)


if __name__ == '__main__':

    App()