Python将两个Tkinter小部件放在完全相同的位置
有没有办法将两个框架放在完全相同的位置?但只有一个是可见的 我这样试过:Python将两个Tkinter小部件放在完全相同的位置,python,python-3.x,user-interface,tkinter,grid,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, p
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)
但是网格管理器在网格中为彼此相邻的两个小部件保留空间,而我的其他小部件现在都位于错误的位置 您可以使用如下所示的
网格
删除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()
使用
包
管理器很容易,但正如您所说的,它不适用于网格
管理器。我能想象到的唯一一种方法是在网格的末端创建一个额外的不可见单元(大小为空),并暂时将不需要的帧放入该不可见单元中cell@sciroccorics:实际上,使用pack
比使用grid
和place
更难。“网格管理器在网格中为相邻的两个网格保留空间“-这是一个错误的说法。如果删除一个帧并使用完全相同的参数放入另一个帧,则它将使用完全相同的空间。但是,如果一个框架比另一个框架大,则可能会导致小部件调整大小,但是grid
不会为这两个框架都保留空间。请提供详细信息。您发布的代码不会导致tkinter为这两个小部件保留空间。“您可能无法在同一位置放置两个对象”-这是错误的,您可以至少以两种不同的方式同时放置两个对象-一种是使用place
,另一种是使用grid
。