sg: window对象 常用方法

在 PySimpleGUI 中,window 对象除了 .get().update() 方法外,还提供了许多其他方法来控制窗口的行为和交互。以下是一些常用的方法:


1. 窗口生命周期管理

  • .close()
    关闭窗口并释放资源。

    window.close()
    
  • .finalize()
    在窗口显示前强制完成布局初始化(通常用于动态更新后)。

    window.finalize()
    
  • .hide() / .un_hide()
    隐藏或显示窗口(不关闭)。

    window.hide()
    window.un_hide()
    
  • .disappear() / .reappear()
    类似 .hide().un_hide(),但可能更高效。


2. 事件循环控制

  • .read(timeout=None, timeout_key='__TIMEOUT__')
    读取事件,可选超时设置(毫秒)。

    event, values = window.read(timeout=1000)  # 1秒超时
    
  • .perform_long_operation(func, callback)
    在后台线程运行函数,完成后触发回调。


3. 元素操作

  • .find_element(key)
    通过键(key)获取窗口中的元素对象。

    element = window.find_element('-INPUT-')
    
  • .extend_layout(container, layout)
    动态扩展布局(如向列或框架添加新元素)。

    window.extend_layout(window['-COLUMN-'], [[sg.Text('New text')]])
    
  • .bring_to_front()
    将窗口置顶显示。


4. 状态与属性

  • .set_title(title)
    修改窗口标题。

    window.set_title('新标题')
    
  • .get_screen_size()
    获取屏幕分辨率。

    screen_width, screen_height = window.get_screen_size()
    
  • .current_location()
    获取窗口当前坐标(左上角)。

    x, y = window.current_location()
    
  • .move(x, y)
    移动窗口到指定坐标。

    window.move(100, 100)
    

5. 键盘/鼠标控制

  • .bind() / .unbind()
    绑定或解绑键盘快捷键。

    window.bind('<Control-s>', '_SAVE_')  # 绑定 Ctrl+S
    
  • .set_cursor(cursor='arrow')
    设置鼠标光标样式(如 'arrow', 'wait', 'hand')。


6. 其他实用方法

  • .start_thread(func, *args, **kwargs)
    在后台线程运行函数(避免界面卡死)。

    window.start_thread(lambda: print('Running in thread'))
    
  • .save_to_disk(filename) / .load_from_disk(filename)
    保存或加载窗口布局到文件(实验性功能)。

  • .refresh()
    强制重绘窗口(解决某些显示问题)。


示例代码

import PySimpleGUI as sg

layout = [[sg.Input(key='-INPUT-')], [sg.Button('清空')]]
window = sg.Window('示例', layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    elif event == '清空':
        window['-INPUT-'].update("")  # 清空输入框
        window.set_title('已清空')    # 修改标题
        window.move(200, 200)        # 移动窗口

window.close()

注意事项

  • 部分方法(如 .extend_layout())需要 PySimpleGUI 版本 ≥ 4.60.0。
  • 动态更新布局时,建议结合 finalize() 确保界面正确渲染。

在 PySimpleGUI 中,window["-INPUT-"](或类似元素对象)除了 .update() 方法外,还支持以下常用方法,按功能分类整理如下:

一、元素值操作

  1. .get()
    获取元素的当前值(如输入框内容、下拉菜单选中项等)。

    input_value = window["-INPUT-"].get()
    
  2. .update(value=None, disabled=None, visible=None, ...)
    更新元素的多个属性(如值、禁用状态、可见性等)。

    window["-INPUT-"].update("新内容", disabled=False)
    

二、焦点与交互

  1. .set_focus()
    将焦点设置到该元素,使用户可以直接输入或操作。

    window["-INPUT-"].set_focus()
    
  2. .select_text()
    选中输入框中的全部文本。

    window["-INPUT-"].select_text()
    
  3. .set_cursor_to_end()
    将光标移动到输入框末尾。

    window["-INPUT-"].set_cursor_to_end()
    

三、样式与布局

  1. .set_size(size=(width, height))
    调整元素的尺寸(宽度和高度,单位为字符或像素)。

    window["-INPUT-"].set_size((20, 1))
    
  2. .expand(expand_x=True, expand_y=True)
    使元素在水平或垂直方向扩展以填充可用空间。

    window["-INPUT-"].expand(True, False)
    
  3. .set_tooltip("提示文本")
    动态设置元素的工具提示文本。

    window["-INPUT-"].set_tooltip("请输入用户名")
    
  4. .set_cursor("ibeam")
    设置元素的光标样式(如 "arrow""ibeam" 等)。

    window["-INPUT-"].set_cursor("ibeam")
    

四、可见性与禁用

  1. .visible = False
    控制元素是否可见(True/False)。

    window["-INPUT-"].visible = False
    
  2. .disabled = True
    禁用或启用元素(True 为禁用,False 为启用)。

    window["-INPUT-"].disabled = True
    
  3. .hide_row()
    隐藏或显示元素所在行的所有内容。

    window["-INPUT-"].hide_row()
    

五、事件绑定

  1. .bind("<Return>", "ENTER")
    绑定自定义事件(如键盘快捷键)。

    window["-INPUT-"].bind("<Return>", "ENTER")
    
  2. .unbind("<Return>")
    解绑已绑定的事件。

    window["-INPUT-"].unbind("<Return>")
    

六、其他实用方法

  1. .password_char = "*"
    设置密码隐藏字符(如 "*")。

    window["-INPUT-"].password_char = "*"
    
  2. .font = ("微软雅黑", 14)
    设置字体(如 ("Arial", 12))。

    window["-INPUT-"].font = ("微软雅黑", 14)
    
  3. .background_color = "#f0f0f0"
    设置背景色和文本颜色(支持颜色名称或十六进制值)。

    window["-INPUT-"].background_color = "#f0f0f0"
    
  4. .metadata = {"user_id": 123}
    存储任意用户数据(可附加到元素上)。

    window["-INPUT-"].metadata = {"user_id": 123}
    
  5. .widget
    访问底层 GUI 框架的原生控件(如 Tkinter 的 Entry 对象)。

    tk_entry = window["-INPUT-"].widget
    

示例代码

import PySimpleGUI as sg

layout = [
    [sg.Input(key="-INPUT-", enable_events=True)],
    [sg.Button("获取值"), sg.Button("清空并禁用")]
]
window = sg.Window("示例", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    elif event == "获取值":
        print("当前值:", window["-INPUT-"].get())
    elif event == "清空并禁用":
        window["-INPUT-"].update("")  # 清空内容
        window["-INPUT-"].disabled = True  # 禁用输入
        window["-INPUT-"].set_tooltip("已禁用输入")  # 更新提示

window.close()
posted @ 2025-10-31 09:49  nxhujiee  阅读(4)  评论(0)    收藏  举报