PySimpleGUI | 用Python玩轉(zhuǎn)GUI開(kāi)發(fā),為什么不能簡(jiǎn)單一點(diǎn)!
GUI可以說(shuō)是玩計(jì)算機(jī)必備的一項(xiàng)技能。作為近幾年非常火熱的Python語(yǔ)言中,它同樣有大量的熱門GUI圖像界面框架,比如wxpython、tkinter、PyQt等。
在本系列中我們將介紹Python中另外一個(gè)GUI庫(kù),比較新興的同時(shí)又是可以說(shuō)是非常非常簡(jiǎn)便制作的包PySimpleGUI。如果你想用十幾行代碼可創(chuàng)建各種不同的跨平臺(tái)GUI、幾分鐘時(shí)間編寫代碼來(lái)制作圖形可視化界面,這個(gè)庫(kù)一定是必然選擇。

在基礎(chǔ)篇本文將分為以下兩個(gè)部分講解:
1、PySimpleGUI介紹
2、PySimpleGUI基本使用
項(xiàng)目主要涉及的Python模塊:
PySimpleGUI
流程圖如下,本次介紹分為兩方面進(jìn)行講解
PySimpleGUI介紹
1、什么是PySimpleGUI
PySimpleGUI庫(kù)是是2018年發(fā)布的個(gè)人開(kāi)源維護(hù)項(xiàng)目,是基于Tkinter、Remi、wxpython、PyQt這些模塊的,其中Remi模塊是將應(yīng)用程序的界面用HTML的形式來(lái)展現(xiàn),所以這個(gè)包有個(gè)亮點(diǎn)就是你可以輸入相應(yīng)的代碼將其轉(zhuǎn)變網(wǎng)頁(yè)形式展示,而其余包則都是用來(lái)做圖形界面的。
其中,PyQt和wxpython目前還在初步階段還不能使用。作為一個(gè)新興的個(gè)人維護(hù)項(xiàng)目,有BUG是正常,所以這個(gè)包會(huì)有反饋的更新的功能。
2、為什么選擇它
很多人會(huì)有這個(gè)問(wèn)題。先說(shuō)說(shuō)它的特點(diǎn)吧,作為一個(gè)集合了各大潮流的GUI模塊的包,其最重要的特色就是代碼量少,門檻低。換句話說(shuō),在所有圖形界面框架中,這個(gè)包是最具Pythonic的。你可以不需要用類與對(duì)象去寫代碼,去創(chuàng)建用戶界面。
因?yàn)樗呀?jīng)包含了絕大多數(shù)原本需要用戶界面構(gòu)建編寫的函數(shù),不僅如此,它還具有Auto-packer技術(shù),可以自動(dòng)創(chuàng)建界面,讀者不需要像tkinter那樣使用布局管理器---GIRD。
3、構(gòu)建步驟
構(gòu)建GUI界面步驟有4步:
Import Create some widgets Create the window Create the event loop
下面進(jìn)行仔細(xì)講解:首先,先引用包,如果沒(méi)下載好的包可以用一下命令在命令框中輸入
pip install PySimpleGUI
如果是下載速度慢的可以用下面的清華鏡像地址下載
pip install PySimpleGUI -i https://pypi.tuna.tsinghua.edu.cn/simple
說(shuō)明:默認(rèn)條件下,PySimpleGUI的下載接口是Tkinter,如果你想要下載PyQt接口的話,可以執(zhí)行以下命令
pip install PySimpleGUIQt
兩者的區(qū)別大同小異,各自都有缺點(diǎn),下文會(huì)有提及。主要Qt端口的GUI對(duì)圖像格式容納得多,而Tkinter端口的功能相對(duì)較多。而后引用包
import PySimpleGUI as sg
引用包后可以查看有哪些主題可以用,并切換到對(duì)應(yīng)的主題顏色,這里選擇一個(gè)比較暖的綠色
#查看所有主題
sg.preview_all_look_and_feel_themes()
#切換主題
sg.change_look_and_feel("GreenMono")
接著就是構(gòu)建GUI的基本框架,下面一步一步帶你制作這樣一個(gè)GUI頁(yè)面??

首先創(chuàng)建一些小部件(widgets),這里舉例創(chuàng)建兩個(gè)文本部件和兩個(gè)按鈕
text = sg.Text("輸入你的早起的看法")
textinput = sg.InputText()
bt = sg.Button('確認(rèn)')
cbt = sg.Button('取消')
layout = [[text, textinout],[bt, cbt]]
可以看到這里創(chuàng)建了一個(gè)Text小部件、一個(gè)人工輸入的InputText、一個(gè)確認(rèn)按鈕和一個(gè)取消按鈕。
需要注意的是,按行布局需要把對(duì)應(yīng)行中的所有部件放到一個(gè)列表中,如上“確認(rèn)”與“取消”按鈕放在一個(gè)列表中,兩個(gè)文本部件放到一個(gè)列表中,最后形成一個(gè)嵌套列表layout。
第三步就是創(chuàng)建一個(gè)窗體,這里不同于傳統(tǒng)流行的GUI框架就是,它不用先創(chuàng)建一個(gè)窗體。窗體包括名字和你設(shè)定的部件
window = sg.Window('歡迎來(lái)到早起Python', layout)
第四步就是創(chuàng)建一個(gè)循環(huán)來(lái)讓GUI界面運(yùn)行同時(shí)讀取與獲取輸入輸出值。這一步尤為重要,一個(gè)圖形用戶交互頁(yè)面需要一個(gè)循環(huán)來(lái)運(yùn)行同時(shí)等待使用者去做事件。一般,用一個(gè)“while“循環(huán)包含邏輯,break結(jié)束就可以完成這一步。
while True:
event, values = window.read()
if event in (None, '取消'):
break
print(f'Event: {event}') #這里的f是用來(lái)把事件按鈕名稱寫出來(lái)
print(str(values))
window.close()
總代碼如下:
import PySimpleGUI as sg
sg.change_look_and_feel("GreenMono")
text = sg.Text("輸入你的早起的看法")
textinput = sg.InputText()
bt = sg.Button('確認(rèn)')
cbt = sg.Button('取消')
layout = [[text, textinput],[bt, cbt]]
window = sg.Window('歡迎來(lái)到早起Python', layout)
while True:
event, values = window.read()
if event in (None, '取消'):
break #相當(dāng)于關(guān)閉界面
print(f'Event: {event}')
print(str(values))
window.close()
效果如圖所示??
4、如何使用部件
前文講過(guò)PySimpleGUI包的特點(diǎn)就是代碼簡(jiǎn)單,除了上述構(gòu)建步驟能體現(xiàn)外,還有一點(diǎn)就是部件名都有別稱,別稱有的只有一個(gè)字母。先舉一下常用到的小部件:Text、InputText、Button、Multiline、InputComb、Spin、Output。
其中中widgets叫做element或者Element,比如按鈕、窗口、標(biāo)簽等都是屬于element。除了以上講過(guò)的部件外,讀者可以自行嘗試其它的。
接下來(lái)介紹widgets的部分簡(jiǎn)寫,簡(jiǎn)寫分為兩類,一類是Python類型的間寫,也即在代碼中利用它的形式。另一種就是返回參數(shù)對(duì)象的Python函數(shù)定義的默認(rèn)值。有一下部分例子:
T = Text Txt = Text
In = InputText Input = InputText
Combo = InputComb DropDown = InputComb
接著讀者可能會(huì)問(wèn),輸出結(jié)果可以放在GUI上嗎?看的方便!答案是可以的,這里用到一個(gè)常見(jiàn)的消息框MsgBox,在代碼中加入如下代碼:
sg.MsgBox(event, values)
但是更高級(jí)的版本用這個(gè)函數(shù)就會(huì)報(bào)錯(cuò)說(shuō)失效了,這里說(shuō)明一下,2018年經(jīng)過(guò)修改后,取消了這個(gè)“MsgBox”函數(shù),將其加入到彈出窗口函數(shù)中,這里我們介紹下面的滾動(dòng)窗口函數(shù)以便接下來(lái)的項(xiàng)目實(shí)戰(zhàn)。
sg.popup_scrolled(values,title='',size=())
其中values是你想顯示的文本值,title是彈出窗口名字,size是窗口大小。
除了上述的部件外,做GUI的熱愛(ài)著最喜歡的莫過(guò)于在圖形交互界面放一張圖片,先上代碼:
import PySimpleGUI as sg
sg.change_look_and_feel("GreenMono")
layout = [
[sg.Image('保時(shí)捷.PNG')]
]
window = sg.Window('照片練習(xí)', layout,location=(50, 50))
while True:
event, values = window.read()
if event in (None):
break #相當(dāng)于關(guān)閉界面
window.close()
圖片效果如下:
看代碼,按照GUI基本框架的使用,這里layout列表中用到了sg.Image這個(gè)函數(shù),這是用來(lái)存儲(chǔ)圖片的。和Tkinter一樣,默認(rèn)端口的PySimpleGUI只有PNG, GIF, PPM/PGM這幾類圖片格式是支持。
如果你想顯示JPG或者TIFF這類格式的話,你需要用到Pillow模塊或者PTL模塊進(jìn)行轉(zhuǎn)換,具體不做詳細(xì)解釋。
相反,PyQt端口的可以容納的圖片格式比默認(rèn)端口的PySimpleGUI多得多。這也是Qt端口的好處。
以上便是PySimpleGUI的基礎(chǔ)版教程,希望對(duì)大家有所幫助!
PS:公號(hào)內(nèi)回復(fù)「Python」即可進(jìn)入Python 新手學(xué)習(xí)交流群,一起 100 天計(jì)劃!
老規(guī)矩,兄弟們還記得么,右下角的 “在看” 點(diǎn)一下,如果感覺(jué)文章內(nèi)容不錯(cuò)的話,記得分享朋友圈讓更多的人知道!


【神秘禮包獲取方式】
