一個非常簡單好用的 Python 圖形界面庫
前一陣,我在為朋友編寫一個源代碼監(jiān)控程序的時候,發(fā)現(xiàn)了一個 Python 領(lǐng)域非常簡單好用的圖形界面庫。
說起圖形界面庫,你可能會想到 TkInter、PyQt、PyGUI 等流行的圖形界面庫,我也曾經(jīng)嘗試使用,一個很直觀的感受就是,這太難用了。就去網(wǎng)上搜搜,看看有沒有一些 demo,拿來改改,結(jié)果很少有,當(dāng)時我就放棄了這些圖形庫的學(xué)習(xí),轉(zhuǎn)而使用了 vue+flask 的形式以瀏覽器網(wǎng)頁作為程序界面,因為我會這個,即使實現(xiàn)起來稍微麻煩,但是也快。
那有朋友可能問了:一定要學(xué)習(xí)圖形界面嗎?
其實不一定,如果你寫的程序都是自己用,或者配合其他程序員使用,那么直接命令行調(diào)用即可,完全不用學(xué)習(xí)圖形界面?那什么時候要學(xué)呢?如果你要做游戲,或者你要為他人(非技術(shù)人員)編寫軟件工具,那么你就需要學(xué)習(xí)圖形界面了。我是后者,偶爾受邀幫別人寫點小工具,因此有個圖形界面體驗會好很多。
今天要說的這個庫就是 PySimpleGUI,在 GitHub 倉庫[1]有 5.1K 個 star,20 天前還有人提交代碼,可以說非常火熱了。
我看了官方文檔,找了個 demo,花了 2 個小時的時間,寫了 56 行代碼,就搞定了一個具有圖形界面的監(jiān)控工具,如下:
要說 PysimpleGUI 最吸引我的地方,在于它有 200 多個示例程序,幾乎覆蓋了日常的開發(fā)需求,拿來稍作修改就可以用,著實方便。
PysimpleGUI 內(nèi)部封裝了 tkinter,Qt(pyside2),wxPython和 Remi,Remi 用于瀏覽器支持,因此你很容易將你的界面搬到瀏覽器中而無需修改代碼。如下圖:

還有最吸引我的一點,就是足夠簡單,在幾分鐘內(nèi)用幾行代碼就可以構(gòu)建自定義 GUI 布局,對于初學(xué)者來說足夠容易,對于高級用戶來說足夠強(qiáng)大。廣泛的文檔。有 100 多種內(nèi)置顏色主題,200 多個示例程序[2],還經(jīng)常更新。如果你玩 Raspberry Pi,也可以用這個庫寫界面,你說好用不好用。
通常一個 PySimpleGUI 程序包含 5 個部分,見下面代碼的注釋:
import?PySimpleGUI?as?sg????????????????????????#?Part?1?-?導(dǎo)入庫
#?定義窗口的內(nèi)容
layout?=?[??[sg.Text("What's?your?name?")],?????#?Part?2?-?排版
????????????[sg.Input()],
????????????[sg.Button('Ok')]?]
#?創(chuàng)建窗口
window?=?sg.Window('Window?Title',?layout)??????#?Part?3?-?窗口定義
????????????????????????????????????????????????
#?Display?and?interact?with?the?Window
event,?values?=?window.read()???????????????????#?Part?4?-?開啟主循環(huán)?window.read()
#?Do?something?with?the?information?gathered
print('Hello',?values[0],?"!?Thanks?for?trying?PySimpleGUI")
#?Finish?up?by?removing?from?the?screen
window.close()??#?Part?5?-?關(guān)閉窗口
執(zhí)行上述代碼,會得到一個如下圖所示的程序:

這僅僅是一個類似 hello world 的程序,PySimpleGUI 還可以做出更加強(qiáng)大的圖形界面和游戲界面,比如:
最后,再告訴大家一條小技巧,如果看到好的圖形界面程序,包括網(wǎng)站,記得收藏相關(guān)的代碼,下次可以直接拿來用,提升開發(fā)效率。本文涉及的開源軟件監(jiān)控工具源代碼,如果感興趣,可以點擊「閱讀原文」獲取下載連接。
最后,學(xué)習(xí)一個新技術(shù)要看重其遷移能力,學(xué)習(xí)一次,可以使用無數(shù)次,那么該技術(shù)就值得學(xué)。原創(chuàng)不易,如果覺得文章對你有幫助,還請關(guān)注、在看支持。
參考資料
GitHub 倉庫: https://github.com/PySimpleGUI/PySimpleGUI
[2]200 多個示例程序: https://github.com/PySimpleGUI/PySimpleGUI/tree/master/DemoPrograms
