You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()

参考示意图:
三个不同尺寸的重叠Frame参考示意图

内容的提问来源于stack exchange,提问作者user3101632

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 11:24:03