用 Python 寫軟件原來這么簡單!
大家好,我是村長!今天給大家介紹一個非常簡單的GUI框架--
PySimpleGUI,它是一個純python的GUI框架。使用它可以快速實現(xiàn)GUI程序,代碼量相比其他框架減少50%到90%,如果你是一個python新手,想快速寫出自己的第一個軟件,這個庫就是一個絕佳選擇。
安裝:pip install pysimplegui
官方文檔 https://pysimplegui.readthedocs.io/en/latest/

使用PySimpleGUI的優(yōu)點:
創(chuàng)建的界面和操作,與使用tkinter,Qt,WxPython和Remi一致。 同樣功能,需要的代碼量是其他框架的10%到50%。 沒有回調(diào)函數(shù)。 訪問幾乎所有基礎(chǔ)GUI框架的控件。 同時支持PySide2和PyQt5(有限支持) 通過僅更改導(dǎo)入語句,即可輕松地在tkinter,Qt,WxPython和Web(Remi)之間切換。 在Python中同時編寫基于桌面和基于Web的GUI的唯一方法 從零開始發(fā)展為具有Python友好界面的純Python實現(xiàn)。 對Python的新手和專家都具有吸引力。 170多個demo程序,教您集成流行的軟件包,例如OpenCV,Matplotlib,PyGame等。 200頁的說明文檔,一本cookbook,大量的內(nèi)置文檔字符串幫助。
一個簡單的例子:
import PySimpleGUI as sg # 官網(wǎng)默認的庫的縮寫為sg,使用時建議保持統(tǒng)一
sg.theme('DarkAmber') # 設(shè)置當(dāng)前主題
# 定義窗口的布局
layout = [ [sg.Text('Some text on Row 1')],
[sg.Text('Enter something on Row 2'), sg.InputText()],
[sg.Button('Ok'), sg.Button('Cancel')] ]
# 創(chuàng)建展示窗口
window = sg.Window('Window Title', layout)
# 事件循環(huán)并獲取輸入值
while True:
event, values = window.read()
if event in (None, 'Cancel'):
break
print('You entered ', values[0])
window.close()

在PySimpleGUI中,窗口布局是按照列表順序從上往下依次排列,二級列表中,從左往右依此排列。
event, values = window.read()
執(zhí)行上述窗口接收消息代碼,將會返回一個(event,values)元組。
event:事件,它可能是一個按鈕的按下、單擊了某些文本、列表項的選擇等,如果用戶直接關(guān)閉窗口,則為None。默認只有Button才能觸發(fā)事件,其他控件需要加上參數(shù)enable_events=True。
values:是一個包含所有輸入元素的值的字典。字典的key,如果沒有指定,系統(tǒng)自動編號從0開始,比如有兩個輸入框,則第一個輸入框的值是values[0],第二個輸入框的值是values[1]。
兩種窗口類型
一次性窗口(one-shot window)
它是一個彈出窗口,它會收集一些數(shù)據(jù),或者提示數(shù)據(jù),然后將其關(guān)閉。
import PySimpleGUI as sg
sg.theme('DarkBlue1')
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)

點擊ok后,窗口自動關(guān)閉。

持久窗口(Persistent window)
它是一個持久存在的窗口。收集輸入值,但不關(guān)閉窗口,而是保持可見狀態(tài),這是向用戶輸出信息和收集輸入數(shù)據(jù)的一種方式。直到用戶單擊退出按鈕或使用X關(guān)閉窗口為止。它更像是典型的Windows / Mac / Linux程序。
import PySimpleGUI as sg
sg.theme('DarkAmber')
layout = [[sg.Text('Persistent window')],
[sg.Input(key='-IN-')],
[sg.Button('Read'), sg.Exit()]]
window = sg.Window('Window that stays open', layout)
while True: # 循環(huán)讀取事件
event, values = window.read()
print(event, values)
if event == sg.WIN_CLOSED or event == 'Exit':
break
window.close()

窗口一直存在,循環(huán)讀取窗口的信息,運行結(jié)果:
Read {'-IN-': '1'}
Read {'-IN-': '2'}
Read {'-IN-': '3'}
Read {'-IN-': '4'}
Read {'-IN-': '5'}
如果覺得自己的窗口配色難看,使用如下代碼更改窗口主題:
#在代碼中使用
sg.theme('BluePurple')
查看可用主題
import PySimpleGUI as sg
theme_name_list = sg.theme_list()
print(theme_name_list) # 所有可用主題的列表
sg.preview_all_look_and_feel_themes() #窗口展示所有主題

一些常用的案例
文件瀏覽
import PySimpleGUI as sg
sg.theme('Dark Red')
layout = [[sg.Text('Browse to a file')],
[sg.Input(key='-FILE-', visible=False, enable_events=True), sg.FileBrowse()]]
event, values = sg.Window('File Compare', layout).read(close=True)
print(f'You chose: {values["-FILE-"]}')

簡單的數(shù)據(jù)輸入窗口:

下拉框
import PySimpleGUI as sg
layout = [
[sg.Combo(
['選項一', '選項二', '選項三', '選項四'],
default_value='選項一',
size=(10, 1))],
[sg.OK()]
]
window = sg.Window('下拉列表元素', layout)
while True:
event, values = window.read()
if event == sg.WIN_CLOSED or event == 'Exit':
break
print(event, values)
window.close()

一個簡易的進度條:
# 一個簡易的進度條
import PySimpleGUI as sg
sg.theme('Dark Blue 8')
for i in range(1000):
sg.OneLineProgressMeter('One Line Meter Example', i + 1, 1000, 'key')

更多的案例,大家可以查看官方的demo文檔:https://pysimplegui.readthedocs.io/en/latest/cookbook
學(xué)習(xí)Python就是為了不重復(fù)造輪子,初期,想要快速創(chuàng)建自己的GUI程序,可以在文檔中復(fù)制需要的實例,調(diào)試修改成自己需要的最終界面,研究它們的設(shè)計模式和邏輯,慢慢你也能寫出那些高大上的軟件了。
如果覺得有用,歡迎點贊分享!

超詳細的 PyCharm 教程,必須收藏!

爬蟲 | 不用逆向捅穿Cloud Flare的5秒盾
