PySimpleGUI 學習筆記(純新手記錄,大神請忽視)

Yvan發表於2020-08-27

學習 Python 主要是開發一些小工具方便工作,代替人工做重複性的工作。開發完後發給同事使用,由於他們電腦沒有開發環境所以打包成 exe 檔案,預設的介面比較醜,所以學習 GUI 的內容。

安裝

pip 安裝 PySimpleGui 庫

pip install PySimpleGUI

pip 安裝 scipy 庫(未安裝之前無法彈出視窗)

pip install scipy

小例子

import PySimpleGUI as sg
from scipy.interpolate import lagrange
# 視窗內的所有控制元件.
layout = [ [sg.Text('Some text on Row 1')],
            [sg.Text('Enter something on Row 2'), sg.InputText()],
            [sg.Button('Ok'), sg.Button('Cancel')] ]

# 生成視窗
window = sg.Window('Window Title', layout)
# 訊息處理和輸入訊息接收
while True:
    event, values = window.read()
    if event in (None, 'Cancel'): 
        break
    print('You entered ', values[0])

window.close()

PySimpleGUI 學習筆記

event和Values詳解

當執行window.read()函式時,將會返回一個(event,values)元組。event是事件,它可能是一個按鈕的按下、列表項的選擇等,比如我設定了一個sg.Submit('提交')按鈕,那麼event返回的是'提交'。如果我什麼也不填,sg.Submit(),那麼返回預設值'Submit',當然介面上顯示的也是Submit。如果使用者點選右上角X關閉視窗,則是None

注意,預設情況下只有Button才能觸發事件,然後執行window.read(),也就是說返回的event始終是button名。但是如果你給控制元件加上一個enable_events=True引數,那麼點選任何控制元件都可以觸發事件了,比如說sg.Text(‘My one-shot window.’,enable_events=True),那麼點選文字也可以觸發事件。

values是一個包含所有輸入元素的值的字典。字典使用鍵來定義詞條。如果你的元素沒有特定的鍵,系統為你提供一個鍵。這些自動編號的鍵是以0開始的。

比如說我有兩個輸入框,則第一個輸入框的值是values[0],第二個輸入框的值是values[1]

舉個例子:

import PySimpleGUI as sg      

layout = [[sg.Text('My one-shot window.')],      
                 [sg.InputText()],      
                 [sg.Submit(), sg.Cancel()]]      

window = sg.Window('Window Title', layout)    

event, values = window.read()    

window.close()
text_input = values[0]    
sg.popup('You entered', text_input) # 彈出視窗

如果你想使用自定義key?很簡單,相應位置修改為以下程式碼:

sg.InputText(key='-IN-')
text_input = values['-IN-']
print(text_input)

如何更新資料?

下面是一個例子,使用window[index].update(指定值)的方法,可以更新key為index控制元件的值,當然,指定值可以是另外一個控制元件的值,一個例子如下:

layout = [[sg.Text('Your typed chars appear here:'), sg.Text(size=(15,1), key='-OUTPUT-')],
          [sg.Input(key='-IN-')],
          [sg.Button('Show'), sg.Button('Exit')]]

window = sg.Window('Pattern 2B', layout)

while True:  # Event Loop
    event, values = window.read()
    print(event, values)
    if event in  (None, 'Exit'):
        break
    if event == 'Show':
        # Update the "output" text element to be the value of "input" element
        window['-OUTPUT-'].update(values['-IN-'])

window.close()

PS:《手冊》中會介紹一個target引數

感謝:www.sitstars.com/archives/82/ 大部分轉載於此篇文章

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章