Python在完全相同的位置上的两个Tkinter小部件



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

我尝试过这样的尝试:

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)

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

您可以使用以下所示的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()

最新更新