
文 | 閑歡
來源:Python 技術「ID: pythonall」

GUI是一個人機互動的界面,換句話說,它是人類與計算機互動的一種方法,GUI主要使用視窗,圖示和選單,也可以通過滑鼠和鍵盤進行操作,
GUI庫包含部件,部件是一系列圖形控制元素的集合,在構建GUI程式時,通常使用層疊方式,眾多圖形控制元素直接疊加起來,
當使用python撰寫應用程式時,你就必須使用GUI庫來完成,對于Python GUI庫,你可以有很多的選擇,
之前我用的最多的是 Tkinter ,這個 GUI 庫比較靈活,可以做出比較復雜的界面,但是在頁面布局和控制元件使用上比較復雜,想畫出一個好看的界面還是要花很多功夫的,
今天給大家介紹一個 GUI 庫 —— Gooey ,一行代碼就可以快速生成 GUI 應用程式,
安裝
安裝方法毫無新意,跟以前我們安裝其他庫一樣:
pip install Gooey
簡單示例
from gooey import Gooey, GooeyParser
@Gooey(program_name="簡單的實體")
def main():
parser = GooeyParser(description="第一個示例!")
parser.add_argument('檔案路徑', widget="FileChooser") # 檔案選擇框
parser.add_argument('日期', widget="DateChooser") # 日期選擇框
args = parser.parse_args() # 接收界面傳遞的引數
print(args)
if __name__ == '__main__':
main()
這里看代碼應該大致知道界面有些什么控制元件:檔案選擇框、日期選擇框,
運行之后的效果如下:

非常的簡潔大方有木有!絕對拿得出手!
組件
GUI 界面都是由一個個組件排列組成的,上面的例子中我們使用了 FileChooser 和 DateChooser 這兩個組件,使用起來是不是很簡單?我們來看看 Gooey 還有哪些組件,
| 控制元件名 | 控制元件型別 |
| -------- | -----: |
| FileChooser | 檔案選擇器 |
| MultiFileChooser | 檔案多選器|
| DirChooser | 目錄選擇器 |
| MultiDirChooser | 目錄多選器 |
| FileSaver | 檔案保存 |
| DateChooser | 日期選擇 |
| TextField | 文本輸入框 |
| Dropdown | 下拉串列 |
| Counter | 計數器 |
| CheckBox | 復選框 |
| RadioGroup | 單選框 |
這些組件基本上看名稱就知道是什么樣子的了,都是我們平時常用的頁面組件,
配置
配置引數主要是對Gooey界面做全域配置,配置方法如下:
@Gooey(program_name='全域配置Demo')
def main():
...
這里就使用了 program_name 這個配置,主要是配置顯示程式的名稱,
除此之外,Gooey 還有好多其他的配置引數:
| 引數 | 型別 | 簡介 |
|---|---|---|
| advanced | Boolean | 切換顯示全部設定還是僅僅是簡化版本 |
| show_config | Boolean | 跳過所有配置并立即運行程式 |
| language | str | 指定從 gooey/languages 目錄讀取哪個語言包 |
| program_name | str | GUI 視窗顯示的程式名,默認會顯 sys.argv[0], |
| program_description | str | Settings 視窗頂欄顯示的描述性文字,默認值從 ArgumentParser 中獲取, |
| default_size | tuple | 視窗默認大小,(600,400) |
| required_cols | int | 設定必選引數行數, |
| optional_cols | int | 設定可選引數行數, |
| dump_build_config | Boolean | 將設定以 JSON 格式保存在硬碟中以供編輯/重用, |
| richtext_controls | Boolean | 打開/關閉控制臺對終端控制序列的支持(對字體粗細和顏色的有限支持) |
比如我們上面的例子中除了我們自己設定的,其他的控制元件例如選擇按鈕、確定按鈕等默認都是英文的,我們可以通過 language 引數來設定語言,語言包在 Gooey 的 GitHub 原始碼中有:

我們使用語言配置:
from gooey import Gooey, GooeyParser
@Gooey(program_name="簡單的實體", language='chinese')
def main():
parser = GooeyParser(description="第一個示例!")
parser.add_argument('檔案路徑', widget="FileChooser") # 檔案選擇框
parser.add_argument('日期', widget="DateChooser") # 日期選擇框
args = parser.parse_args() # 接收界面傳遞的引數
print(args)
if __name__ == '__main__':
main()
這里加了一個 language 引數,我們看看運行后效果:

我們可以看到,界面上的文字都變成中文了,
結構布局
通過使用一些簡單的自定義,您可以使用Gooey實作相當靈活的布局,我們可以通過Gooey裝飾器的各種引數來控制總體布局選項,
show_sidebar=True

show_sidebar=False

navigation='TABBED'

tabbed_groups=True

實體
我們通過一個小栗子來看看運行的效果吧,
from gooey import Gooey, GooeyParser
@Gooey(
richtext_controls=True, # 打開終端對顏色支持
program_name="MQTT連接訂閱小工具", # 程式名稱
encoding="utf-8", # 設定編碼格式,打包的時候遇到問題
progress_regex=r"^progress: (\d+)%$" # 正則,用于模式化運行時進度資訊
)
def main():
settings_msg = 'MQTT device activation information subscription'
parser = GooeyParser(description=settings_msg)
subs = parser.add_subparsers(help='commands', dest='command')
my_parser = subs.add_parser('MQTT訊息訂閱')
my_parser.add_argument("connect", metavar='運行環境',help="請選擇開發環境",choices=['dev環境','staging環境'], default='dev環境')
my_parser.add_argument("device_type",metavar='設備型別',help="請選擇設備型別",choices=['H1','H3'],default='H1')
my_parser.add_argument("serialNumber", metavar='設備SN號',default='LKVC19060047',help='多個請用逗號或空格隔開')
siege_parser = subs.add_parser('進度條控制')
siege_parser.add_argument('num',help='請輸入數字',default=100)
args = parser.parse_args()
print(args, flush=True) # flush=True在打包的時候會用到
if __name__ == '__main__':
main()
這個例子運行的效果如下:

打包成應用程式
第一步,先安裝我們的打包庫:
pip install pyinstaller
第二步,執行打包命令:
pyinstaller -F gooeydemo.py -w
等待執行完成,我們就可以在代碼目錄下看到這樣的結構:

我們的 exe 可執行檔案就在 dist 檔案夾下,
總結
今天給大家介紹了 Gooey 的一些簡單使用,個人覺得比 Tkinter 要好用一些,應對一些簡單的 GUI 界面,我們使用 Gooey 可以快速生成,而使用 Tkinter 的話,可能就需要耗費一些時間了,當然,Gooey 還有一些其他的特性,大家有興趣可以去探索!
PS:公號內回復「Python」即可進入Python 新手學習交流群,一起 100 天計劃!
老規矩,兄弟們還記得么,右下角的 “在看” 點一下,如果感覺文章內容不錯的話,記得分享朋友圈讓更多的人知道!

【代碼獲取方式】
識別文末二維碼,回復:閑歡

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/350966.html
標籤:python
