PySimpleGUI | 用Python玩轉GUI開發(fā),為什么不能簡單一點!
GUI可以說是玩計算機必備的一項技能。作為近幾年非?;馃岬腜ython語言中,它同樣有大量的熱門GUI圖像界面框架,比如wxpython、tkinter、PyQt等。
在本系列中我們將介紹Python中另外一個GUI庫,比較新興的同時又是可以說是非常非常簡便制作的包PySimpleGUI。如果你想用十幾行代碼可創(chuàng)建各種不同的跨平臺GUI、幾分鐘時間編寫代碼來制作圖形可視化界面,這個庫一定是必然選擇。

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

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


【神秘禮包獲取方式】
