學習 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()
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 協議》,轉載必須註明作者和本文連結