
- PySimpleGUI 教程
- PySimpleGUI - 首页
- PySimpleGUI - 简介
- PySimpleGUI - 环境设置
- PySimpleGUI - Hello World
- PySimpleGUI - 弹出窗口
- PySimpleGUI - 窗口类
- PySimpleGUI - 元素类
- PySimpleGUI - 事件
- PySimpleGUI - 菜单栏
- PySimpleGUI - Matplotlib 集成
- PySimpleGUI - 使用 PIL
- PySimpleGUI - 调试器
- PySimpleGUI - 设置
- PySimpleGUI 有用资源
- PySimpleGUI - 快速指南
- PySimpleGUI - 有用资源
- PySimpleGUI - 讨论
PySimpleGUI - 事件
任何 GUI 应用程序都是事件驱动的,能够响应 GUI 元素上发生的各种可能的事件。在 PySimpleGUI 中,事件处理是在 GUI 设计构建之后的无限循环内完成的,持续检查是否发生事件并根据事件执行操作。
事件主要分为两种类型:
窗口事件,以及
元素事件。
窗口事件默认启用,包括按钮事件(任何按钮被点击时发生)和标题栏上的“X”按钮被点击的事件。
元素事件默认不启用。只有在创建元素时将“enable_events”参数设置为 True 时,才能检测到特定于元素的事件。
窗口关闭事件
使 PySimpleGUI 窗口保持存在的无限事件循环,在用户按下“X”按钮或执行 Window 类的 close() 方法时终止。终止循环的标准方法如下:
import PySimpleGUI as psg ... while True: ... if event == psg.WIN_CLOSED: break ... window.close()
如果将此参数设置为 True,Widow 类还会发出“enable_close_attempted_event”。在循环内部检测到它时,调用是/否弹出窗口是一个好习惯。
window = psg.Window('Calculator', layout, enable_close_attempted_event=True) while True: event, values = window.read() print(event, values) if event == "Add": result = int(values['-FIRST-']) + int(values['-SECOND-']) if event == "Sub": result = int(values['-FIRST-']) - int(values['-SECOND-']) window['-OUT-'].update(result) if event == psg.WINDOW_CLOSE_ATTEMPTED_EVENT and psg.popup_yes_no('Do you really want to exit?') == 'Yes': break if event == psg.WIN_CLOSED or event == 'Exit': break
在这种情况下,当按下“X”按钮时,会出现带有是/否按钮的弹出窗口,当点击“是”按钮时程序退出。
它将生成以下输出窗口:

事件值还会返回“-WINDOW CLOSE ATTEMPTED-”值。
-WINDOW CLOSE ATTEMPTED- {'-FIRST-': '200', '-SECOND-': '300'}
按钮事件
按钮点击事件默认启用。要禁用,请使用“Button.update(disabled=True)”。您也可以在 Button 的构造函数中设置“enable_events=True”,它将启用 Button Modified 事件。当某些内容“写入”按钮时,将触发此事件。
当我们读取窗口的内容(使用“window.read()”)时,按钮值将是其标题(如果未设置键)或键(如果已设置)。
在上面的示例中,由于未在 Add 和 Sub 按钮上设置 key 参数,因此在读取窗口时会返回它们的标题。
Add {'-FIRST-': '200', '-SECOND-': '300'}
在程序中向 Add 和 Sub 按钮添加 key 参数。
import PySimpleGUI as psg layout = [ [psg.Text('Enter a num: '), psg.Input(key='-FIRST-')], [psg.Text('Enter a num: '), psg.Input(key='-SECOND-')], [psg.Text('Result : '), psg.Text(key='-OUT-')], [psg.Button("Add", key='-ADD-'), psg.Button("Sub", key='- SUB-'), psg.Exit()], ] window = psg.Window('Calculator', layout) while True: event, values = window.read() print(event, values) if event == "-ADD-": result = int(values['-FIRST-']) + int(values['-SECOND-']) if event == "-SUB-": result = int(values['-FIRST-']) - int(values['-SECOND-']) window['-OUT-'].update(result) if event == psg.WIN_CLOSED or event == 'Exit': break window.close()
read() 方法返回的元组现在将显示所按按钮的键。
-ADD- {'-FIRST-': '200', '-SECOND-': '300'}
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
其他元素的事件
许多元素在发生某种类型的用户交互时会发出事件。例如,当移动滑块时,或从列表中选择一个项目,或点击一个单选按钮。
与 Button 或 Window 不同,这些事件默认不启用。要为元素启用事件,请设置参数“enable_events=True”。
下表显示了元素及其生成的事件。
名称 | 事件 |
---|---|
InputText | 按下任何键 |
Combo | 项目被选中 |
Listbox | 选择更改 |
Radio | 选择更改 |
Checkbox | 选择更改 |
Spinner | 新项目被选中 |
Multiline | 按下任何键 |
Text | 点击 |
状态栏 | 点击 |
图形 | 点击 |
图形 | 拖动 |
图形 | 拖动结束(鼠标抬起) |
TabGroup | 标签被点击 |
Slider | 滑块移动 |
Table | 行被选中 |
Tree | 节点被选中 |
ButtonMenu | 菜单项被选中 |
右键菜单 | 菜单项被选中 |