在 PySimpleGUI 中,FindElement(key) 或 Element(key) 方法用于通过控件的唯一标识符 key 获取对应的控件对象,以便动态修改其属性(如文本、颜色、可见性等)。以下是具体示例:
示例场景
假设有一个窗口,包含以下控件:
- 一个输入框(
key='-INPUT-') - 一个按钮(
key='-SUBMIT-') - 一个文本标签(
key='-OUTPUT-')
用户输入内容后点击按钮,程序将输入框的内容显示在文本标签中,并修改按钮的文本和状态。
完整代码示例
import PySimpleGUI as sg# 定义布局
layout = [[sg.Input(key='-INPUT-', size=(20, 1))],[sg.Button('提交', key='-SUBMIT-'), sg.Button('退出', key='-EXIT-')],[sg.Text('等待输入...', key='-OUTPUT-')]
]# 创建窗口(启用 finalize=True 以支持动态更新)
window = sg.Window('动态控件示例', layout, finalize=True)# 事件循环
while True:event, values = window.read()if event == sg.WIN_CLOSED or event == '-EXIT-':breakelif event == '-SUBMIT-':# 1. 获取输入框的内容user_input = values['-INPUT-']# 2. 通过 key 修改文本标签的内容window['-OUTPUT-'].update(f'你输入了: {user_input}')# 3. 通过 FindElement 修改按钮的文本和禁用状态submit_button = window.FindElement('-SUBMIT-') # 或 window.Element('-SUBMIT-')submit_button.update('已提交', disabled=True)# 4. 3秒后恢复按钮状态(演示动态更新)sg.popup_auto_close('3秒后恢复按钮状态', auto_close_duration=1)sg.time.wait(3000) # 等待3秒submit_button.update('提交', disabled=False)window.close()
关键操作解析
-
获取控件对象
window['-SUBMIT-'](推荐简写方式)window.FindElement('-SUBMIT-')或window.Element('-SUBMIT-')(等效方法)
-
动态更新控件属性
- 修改文本:
update('新文本')window['-OUTPUT-'].update('你输入了: ' + values['-INPUT-']) - 禁用按钮:
update(disabled=True)submit_button.update(disabled=True) - 修改颜色:
update(text_color='red')window['-OUTPUT-'].update(text_color='red')
- 修改文本:
-
链式操作
可以一次性更新多个属性:window['-SUBMIT-'].update('点击我', button_color=('white', 'green'))
注意事项
key的唯一性:每个控件的key必须在窗口中唯一,否则会引发错误。finalize=True:若需在窗口创建后动态修改控件,必须设置finalize=True。- 性能优化:频繁更新控件时(如实时进度条),建议减少不必要的
update()调用。
其他常用控件操作
| 操作类型 | 方法示例 |
|---|---|
| 修改输入框内容 | window['-INPUT-'].update('默认文本') |
| 隐藏控件 | window['-LABEL-'].update(visible=False) |
| 修改下拉选项 | window['-COMBO-'].update(values=['选项1', '选项2'], value='选项1') |
| 进度条更新 | window['-PROGRESS-'].update(current_count=50) |
通过 FindElement(key) 或直接使用 window[key],可以灵活控制窗口中的任何控件,实现高度动态化的交互界面。