- 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'}
其他元素的事件
許多元素在發生某種型別的使用者互動時會發出事件。例如,當移動滑塊時,或從列表中選擇一個專案,或點選一個單選按鈕。
與 Button 或 Window 不同,這些事件預設不啟用。要為元素啟用事件,請設定引數“enable_events=True”。
下表顯示了元素及其生成的事件。
| 名稱 | 事件 |
|---|---|
| InputText | 按下任何鍵 |
| Combo | 專案被選中 |
| Listbox | 選擇更改 |
| Radio | 選擇更改 |
| Checkbox | 選擇更改 |
| Spinner | 新專案被選中 |
| Multiline | 按下任何鍵 |
| Text | 點選 |
| 狀態列 | 點選 |
| 圖形 | 點選 |
| 圖形 | 拖動 |
| 圖形 | 拖動結束(滑鼠抬起) |
| TabGroup | 標籤被點選 |
| Slider | 滑塊移動 |
| Table | 行被選中 |
| Tree | 節點被選中 |
| ButtonMenu | 選單項被選中 |
| 右鍵選單 | 選單項被選中 |