sg.完整布局演示

sg.Push() 是 PySimpleGUI 中用于布局对齐控制的特殊元素,它本身不显示任何内容,但通过占据空间实现元素在行内的左/中/右对齐效果。以下是详细解析及用法示例:

核心作用原理

  • 空间占据:Push 元素会“推挤”其他元素,改变它们在行内的位置。
  • 对齐逻辑
    • 左对齐:在目标元素左侧放置 Push,将其推到右侧(如 [sg.Push(), sg.Button('Submit')])。
    • 居中对齐:在目标元素左右各放一个 Push,两侧空间均等挤压(如 [sg.Push(), sg.Text('Center'), sg.Push()])。
    • 右对齐:在目标元素右侧放置 Push,将其推到左侧(较少使用,通常用左 Push 实现右对齐)。

典型使用场景

1. 按钮居中

layout = [
    [sg.Text('标题', font=('Arial', 20), justification='center', expand_x=True)],
    [sg.Push(), sg.Button('确定'), sg.Push()]  # 按钮居中
]

2. 输入框右对齐

layout = [
    [sg.Text('输入内容:', justification='right', size=10), 
     sg.Push(),  # 将输入框推到右侧
     sg.Input(justification='right', size=20)]
]

3. 混合布局对齐

layout = [
    [sg.Text('左侧内容'), sg.Push(), sg.Text('右侧内容')],  # 左/右内容分居两侧
    [sg.Push(), sg.Button('居中按钮'), sg.Push()]  # 按钮居中
]

关键特性与注意事项

  1. 无显示内容:Push 本身不可见,仅通过占据空间影响布局。
  2. 尺寸自适应:Push 默认填充可用空间,无需指定尺寸。若需固定宽度,可配合 size 参数(如 sg.Push(size=(5,1)))。
  3. element_justification 协同
    • 容器级对齐(如 Columnelement_justification='right')控制子元素默认对齐。
    • Push 用于行内微调,可覆盖容器级对齐。
  4. 响应式布局:在窗口大小变化时,Push 会动态调整占据空间,保持对齐效果。

对比其他对齐方式

方法 适用场景 特点
sg.Push() 行内元素左/中/右对齐 灵活微调,支持动态响应
element_justification 容器内所有元素默认对齐 批量设置,简化布局代码
justification 单个元素内容对齐(如文本) 控制元素内部内容的对齐方式

示例代码:完整布局演示

import PySimpleGUI as sg

layout = [
    [sg.Text('表单标题', font=('Arial', 16), justification='center', expand_x=True)],
    [sg.Text('姓名:', size=8, justification='right'), 
     sg.Input(key='-NAME-', size=20), 
     sg.Text('年龄:', size=6, justification='right'), 
     sg.Input(key='-AGE-', size=10)],
    [sg.Push(),  # 将按钮组推到右侧
     sg.Button('提交'), 
     sg.Button('取消'),
     sg.Push()],  # 冗余 Push 确保右侧无多余空间
    [sg.HSeparator()],
    [sg.Push(), sg.Text('底部提示信息'), sg.Push()]  # 居中显示提示
]

window = sg.Window('Push 示例', layout)
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
window.close()

效果说明

  • 姓名和年龄输入框水平排列,通过 Push 调整按钮位置。
  • 按钮组右对齐,底部提示信息居中。
  • 窗口大小变化时,布局自动保持对齐关系。

通过合理使用 sg.Push(),可以轻松实现复杂且响应式的界面布局,提升用户体验。

posted @ 2025-10-04 13:55  nxhujiee  阅读(10)  评论(0)    收藏  举报