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()] # 按钮居中
]
关键特性与注意事项
- 无显示内容:Push 本身不可见,仅通过占据空间影响布局。
- 尺寸自适应:Push 默认填充可用空间,无需指定尺寸。若需固定宽度,可配合
size
参数(如sg.Push(size=(5,1))
)。 - 与
element_justification
协同:- 容器级对齐(如
Column
的element_justification='right'
)控制子元素默认对齐。 - Push 用于行内微调,可覆盖容器级对齐。
- 容器级对齐(如
- 响应式布局:在窗口大小变化时,Push 会动态调整占据空间,保持对齐效果。
对比其他对齐方式
方法 | 适用场景 | 特点 |
---|---|---|
sg.Push() |
行内元素左/中/右对齐 | 灵活微调,支持动态响应 |
element_justification |
容器内所有元素默认对齐 | 批量设置,简化布局代码 |
justification |
单个元素内容对齐(如文本) | 控制元素内部内容的对齐方式 |
示例代码:完整布局演示
import PySimpleGUI as sglayout = [[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()
,可以轻松实现复杂且响应式的界面布局,提升用户体验。