Pysimplegui 简明教程
PySimpleGUI - Events
任何 GUI 应用程序都是事件驱动的,它有能力响应 GUI 元素上发生的各种可能的事件。在 PySimpleGUI 中,事件处理在 GUI 设计的结构下面一个无限循环中完成,不断检查是否发生了事件并根据事件执行动作。
有两种类型的事件 −
-
Window events, and
-
Element events.
窗口事件默认启用,包括按钮事件(当单击任何按钮时发生)和标题栏上“X”按钮的事件。
元素事件默认不会启用。只有当在创建元素时将“enable_events”参数设置为 True 时,才能检测到特定于元素的事件。
Window Closed Event
一个无限事件循环使 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 Events
按钮单击事件默认启用。要禁用,请使用“Button.update(disabled=True)”。您还可以在按钮的构造函数中设置“enable_events=True”,它将启用 Button Modified 事件。当有内容“写入”到按钮时触发此事件。
当我们读取窗口的内容(使用“window.read()”)时,按钮值将是其标题(如果未设置键)或已设置则为键。
在上述示例中,由于未在 Add 和 Sub 按钮上设置键参数,因此在读取窗口时将返回它们的标题。
Add {'-FIRST-': '200', '-SECOND-': '300'}
在程序中向 Add 和 Sub 按钮添加键参数。
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'}
Events of Other Elements
当发生某种类型的用户交互时,许多元素会发出事件。例如,当移动滑块或从列表中选择一个项目或单击单选按钮时。
与 Button 或 Window 不同,这些事件默认不会启用。要为元素启用事件,请将参数“enable_events=True”设置为。
下表显示了元素及其生成的事件。
Name |
Events |
InputText |
any key pressed |
Combo |
item selected |
Listbox |
selection changed |
Radio |
selection changed |
Checkbox |
selection changed |
Spinner |
new item selected |
Multiline |
any key pressed |
Text |
Clicked |
Status Bar |
Clicked |
Graph |
Clicked |
Graph |
Dragged |
Graph |
drag ended (mouse up) |
TabGroup |
tab clicked |
Slider |
slider moved |
Table |
row selected |
Tree |
node selected |
ButtonMenu |
menu item chosen |
Right click menu |
menu item chosen |