Element(key):通过控件的 key 属性获取控件对象
在 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-':
        break
    
    elif 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],可以灵活控制窗口中的任何控件,实现高度动态化的交互界面。
                    
                
                
            
        
浙公网安备 33010602011771号