Element(key):通过控件的 key 属性获取控件对象

在 PySimpleGUI 中,FindElement(key)Element(key) 方法用于通过控件的唯一标识符 key 获取对应的控件对象,以便动态修改其属性(如文本、颜色、可见性等)。以下是具体示例:


示例场景

假设有一个窗口,包含以下控件:

  1. 一个输入框(key='-INPUT-'
  2. 一个按钮(key='-SUBMIT-'
  3. 一个文本标签(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()

关键操作解析

  1. 获取控件对象

    • window['-SUBMIT-'](推荐简写方式)
    • window.FindElement('-SUBMIT-')window.Element('-SUBMIT-')(等效方法)
  2. 动态更新控件属性

    • 修改文本update('新文本')
      window['-OUTPUT-'].update('你输入了: ' + values['-INPUT-'])
      
    • 禁用按钮update(disabled=True)
      submit_button.update(disabled=True)
      
    • 修改颜色update(text_color='red')
      window['-OUTPUT-'].update(text_color='red')
      
  3. 链式操作
    可以一次性更新多个属性:

    window['-SUBMIT-'].update('点击我', button_color=('white', 'green'))
    

注意事项

  1. key 的唯一性:每个控件的 key 必须在窗口中唯一,否则会引发错误。
  2. finalize=True:若需在窗口创建后动态修改控件,必须设置 finalize=True
  3. 性能优化:频繁更新控件时(如实时进度条),建议减少不必要的 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],可以灵活控制窗口中的任何控件,实现高度动态化的交互界面。

posted @ 2025-10-29 15:34  nxhujiee  阅读(5)  评论(0)    收藏  举报