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

如何在PanedWindow添加/移除组件时保持根窗口尺寸稳定?

解决PanedWindow操作导致根窗口尺寸变化的问题

问题核心是:根窗口在未手动调整前,会自动根据子组件的请求尺寸调整大小;手动拖动窗口后,系统会固定当前尺寸,后续子组件的尺寸变化不再触发根窗口调整。要在初始状态就实现根窗口尺寸稳定,只需强制根窗口固定初次渲染后的尺寸即可。

具体实现步骤:

  • 所有组件创建完成后,调用root.update()让窗口完成初次渲染,获取真实的初始尺寸
  • 通过root.geometry()将根窗口尺寸固定为当前大小,后续add/forget操作只会改变PanedWindow内部子组件布局,根窗口尺寸保持不变

修改后的示例代码:

import tkinter as tk
from tkinter import ttk

state = "shown"
def hide_show(paned, canvas):
    global state
    if state=="shown":
        paned.forget(canvas)
        state = "hidden"
    else:
        paned.add(canvas, weight=1)
        state = "shown"

root = tk.Tk()
paned_window = ttk.PanedWindow(root, orient=tk.HORIZONTAL,)
button       = ttk.Button     (root, text="hide/show", command=lambda: hide_show(paned_window, canvas2))
paned_window.grid(row=0, sticky=(tk.W, tk.E, tk.S, tk.N))
button.grid      (row=1, sticky=tk.W)
root.rowconfigure   (0, weight=1)
root.rowconfigure   (1, weight=0)
root.columnconfigure(0, weight=1)

canvas1 = tk.Canvas(paned_window, height=100, width=100, bg="red")
paned_window.add(canvas1, weight=1)
canvas2 = tk.Canvas(paned_window, height=100, width=100, bg="green")
paned_window.add(canvas2, weight=1)

# 关键代码:固定根窗口初始尺寸
root.update()
root.geometry(f"{root.winfo_width()}x{root.winfo_height()}")

root.mainloop()

如果需要保留窗口手动调整的能力,同时让add/forget操作不改变当前尺寸,也可以在操作前后保存并恢复窗口尺寸,不过上述方法是最直接的初始固定方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 13:36:01