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

如何在PySimpleGUI元素中按指定比例设置垂直行高?

PySimpleGUI Tab内组件按比例分配纵向高度的实现方案

方案1:纯PySimpleGUI原生配置实现

核心是通过Column容器的rows_weights参数指定行高度权重,配合组件的拉伸参数实现比例分配:

  • 两个组件均设置expand_x=True保证横向占满全部可用宽度
  • 两个组件均设置expand_y=True允许纵向拉伸
  • 将两个组件放在同一个Column容器内,给容器设置rows_weights=[2,1],即第0行(Table)权重2,第1行(Canvas)权重1,自动实现2:1的高度分配
  • 注意需要同时给Column容器设置expand_x=True和expand_y=True,保证容器本身能占满Tab的全部可用空间
    示例代码片段:
import PySimpleGUI as sg

# Tab内的布局
tab_content = [
    [sg.Column(
        layout=[
            [sg.Table(values=[[i for i in range(5)] for _ in range(10)], 
                     headings=[f'列{i}' for i in range(5)],
                     expand_x=True, expand_y=True)],  # Table允许双向拉伸
            [sg.Canvas(background_color='lightgray',
                     expand_x=True, expand_y=True)]   # Canvas允许双向拉伸
        ],
        expand_x=True, expand_y=True,  # Column占满Tab空间
        rows_weights=[2, 1]  # 两行高度权重2:1
    )]
]

layout = [
    [sg.TabGroup([[sg.Tab('测试Tab', tab_content)]], expand_x=True, expand_y=True)]
]

window = sg.Window('比例分配测试', layout, size=(800, 600), resizable=True)
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
window.close()

方案2:调用底层Tkinter接口实现(适配原生配置不生效场景)

如果原生配置仍然无法生效,直接操作底层TK组件的网格权重即可:

  • 窗口初始化时添加finalize=True保证组件渲染完成
  • 后续通过组件key拿到对应的TK对象,对父容器设置行权重即可
    示例代码片段:
import PySimpleGUI as sg
import tkinter as tk

# 布局里给两个组件指定key方便后续获取
tab_content = [
    [sg.Table(values=[[i for i in range(5)] for _ in range(10)], 
             headings=[f'列{i}' for i in range(5)],
             key='-TABLE-', expand_x=True, expand_y=True)],
    [sg.Canvas(background_color='lightgray',
             key='-CANVAS-', expand_x=True, expand_y=True)]
]

layout = [
    [sg.TabGroup([[sg.Tab('测试Tab', tab_content)]], expand_x=True, expand_y=True)]
]

# 初始化时加finalize=True保证组件渲染完成
window = sg.Window('比例分配测试', layout, size=(800, 600), resizable=True, finalize=True)

# 获取Canvas组件的父容器(即Tab内部的TK框架)
parent_frame = window['-CANVAS-'].TKWidget.master
# 设置第0行(Table所在行)权重2,第1行(Canvas所在行)权重1
parent_frame.grid_rowconfigure(0, weight=2)
parent_frame.grid_rowconfigure(1, weight=1)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
window.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:57:01