首页 > 解决方案 > Tkinter 在窗格窗口中动态调整小部件的大小

问题描述

我目前有一个带有两个 LabelPanes 的窗口。在 rightPane 中,我有三个 LabelFrame。当我调整窗口大小时,最底部的 LabelFrame 会变大,但前两个仍然是我在设置它们的高度时指定的大小。我想要的是当窗口在 Y 轴上调整大小时,它们三个都能均匀地增长。这可能吗?

import tkinter as tk
if __name__ == '__main__':
    appHeight=720
    aspectRatio=16/9
    appWidth=int(appHeight*aspectRatio)
    app=tk.Tk()
    app.title("Title")
    app.minsize(width=appWidth,height=appHeight)
    #================================================================================
    # Setup Panes
    #================================================================================
    #Create Left Pane for settings
    leftPane = tk.PanedWindow(bd=4,relief='raised',bg='red')
    leftPane.pack(fill=tk.BOTH,expand=1)
    #Add Settings Frame to Pane
    settingsFrame = tk.LabelFrame(leftPane,text='Signature Filters',padx=5,pady=5,width=int(appWidth/4))
    leftPane.add(settingsFrame)

    #Create Right Pane for charts
    rightPane = tk.PanedWindow(leftPane,orient=tk.VERTICAL,bd=4,relief=tk.SUNKEN,bg='blue')
    leftPane.add(rightPane)
    #Add Depth Frame to Pane
    depthFrame = tk.LabelFrame(rightPane,text='Depth Signature',padx=5,pady=5,height=int(appHeight/3))
    rightPane.add(depthFrame)
    #Add Velocity Frame to Pane
    velocityFrame = tk.LabelFrame(rightPane,text='Velocity Signature',padx=5,pady=5,height=int(appHeight/3))
    rightPane.add(velocityFrame)
    #Add Depth Frame to Pane
    currentFrame = tk.LabelFrame(rightPane,text='Current Signature',padx=5,pady=5,height=int(appHeight/3))
    rightPane.add(currentFrame)

app.mainloop()

标签: pythontkinter

解决方案


添加每个窗格时,您需要为stretch字符串“always”定义选项。

rightPane.add(depthFrame, stretch="always")
rightPane.add(velocityFrame, stretch="always")
rightPane.add(currentFrame, stretch="always")

stretch接受以下值:

  • 始终此窗格将始终伸展。
  • first仅当此窗格是第一个窗格(最左侧或最顶部)时,它才会拉伸。
  • 仅当此窗格是最后一个窗格(最右侧或最底部)时,它才会拉伸这是默认值。
  • 当此窗格不是第一个或最后一个窗格时,它才会拉伸。
  • never此窗格永远不会拉伸。

此信息来自规范 tcl/tk 文档的paneconfigure部分。


推荐阅读