Tkinter如何创建尺寸不统一的重叠Frame并通过raise方法切换显示
实现方案
完全可以实现,你需要结合place布局管理器与组件的raise()方法即可完成需求,对应操作逻辑如下:
- 所有要重叠展示的Frame都放在同一个父容器下,不要用
pack/grid布局(这两类布局会自动避让组件,无法实现重叠效果),改用place()方法给每个Frame单独指定坐标、宽高,无需尺寸一致即可完成重叠放置 - 需要切换展示指定Frame时,直接调用该Frame实例的
raise()方法,即可将其调整到堆叠层级的最上方,其余重叠的Frame会自动被遮挡,无需额外操作隐藏其他Frame
你可以参考下方最简示例代码验证效果:
import tkinter as tk root = tk.Tk() root.geometry("400x300") # 创建公共父容器 container = tk.Frame(root) container.pack(fill=tk.BOTH, expand=True, padx=20, pady=20) # 创建三个尺寸不同的Frame,对应参考图的黄、绿、红三个区域 frame_yellow = tk.Frame(container, bg="yellow", width=300, height=200) frame_green = tk.Frame(container, bg="green", width=200, height=150) frame_red = tk.Frame(container, bg="red", width=100, height=100) # 全部放置在父容器的左上角原点位置,自然重叠 for frame in (frame_yellow, frame_green, frame_red): frame.place(x=0, y=0) # 切换展示逻辑 def raise_frame(target_frame): target_frame.raise_() # 底部切换按钮 tk.Button(root, text="显示黄色Frame", command=lambda: raise_frame(frame_yellow)).pack(side=tk.LEFT, padx=10, pady=5) tk.Button(root, text="显示绿色Frame", command=lambda: raise_frame(frame_green)).pack(side=tk.LEFT, padx=10, pady=5) tk.Button(root, text="显示红色Frame", command=lambda: raise_frame(frame_red)).pack(side=tk.LEFT, padx=10, pady=5) # 默认显示黄色Frame frame_yellow.raise_() root.mainloop()
参考示意图:
内容的提问来源于stack exchange,提问作者user3101632
相关产品推荐
相关产品推荐

