PySimpleGUI | 用Python玩轉(zhuǎn)GUI開發(fā),為什么不能簡單一點!

本文為Python GUI開發(fā)實戰(zhàn)系列第一篇!
大家好,在之前的文章中我們說過如何制作一個NBA爬蟲GUI,其中涉及最重要的部分講解就是圖形用戶界面(Graphical User Interface)。
GUI可以說是玩計算機必備的一項技能。作為近幾年非常火熱的Python語言中,它同樣有大量的熱門GUI圖像界面框架,比如wxpython、tkinter、PyQt等。
在本系列中我們將介紹Python中另外一個GUI庫,比較新興的同時又是可以說是非常非常簡便制作的包PySimpleGUI。如果你想用十幾行代碼可創(chuàng)建各種不同的跨平臺GUI、幾分鐘時間編寫代碼來制作圖形可視化界面,這個庫一定是必然選擇。

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

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