【原】用Python創(chuàng)建你第一個(gè)GIS程序[2]:圖形用戶界面
GIS薈
2021-09-19
| 轉(zhuǎn)藏
前言:給程序創(chuàng)建一個(gè)可視化的操作界面是一個(gè)基本的需求,也是軟件的三大組成部分之一。清晰明了的操作界面能幫助用戶正確操作程序,同時(shí)也傳遞出設(shè)計(jì)者的開(kāi)發(fā)理念和解決問(wèn)題的方式。 |
什么是 GUI?GUI(Graphical User Interface),圖形用戶界面。是現(xiàn)代軟件的三大組成部分。你打開(kāi)軟件首先看到的就是它,按鈕、圖標(biāo)、下拉框、標(biāo)注、文本框等等,這些元素組成了圖形用戶界面。而在“遠(yuǎn)古”時(shí)期的大部分軟件和如今的部分軟件,是沒(méi)有圖形用戶界面的,而是各種原始的命令行窗口。使用命令行窗口操作軟件的學(xué)習(xí)成本高,不直觀,大部分普通用戶看了都會(huì)敬而遠(yuǎn)之。所以構(gòu)建軟件圖形用戶界面能幫助用戶快速上手,提高效率和友好度。而提供一整套 GUI 開(kāi)發(fā)工具、包或者模塊就叫做 GUI 框架。
GUI框架的選擇得益于 Python 語(yǔ)言的熱度快速上升,較為平滑友好的學(xué)習(xí)曲線。到目前為止已經(jīng)有許多支持 Python 平臺(tái)的 GUI 框架。給了我們?cè)S多選擇,這是一件好事,也是一件不好的事,特別是不了解這方面情況的人,會(huì)造成選擇恐懼癥。為了不讓好事變成壞事,我們就來(lái)談一談如今 Python 平臺(tái)的各種 GUI 框架!也為之后的程序搭建打下基礎(chǔ)。1.PyQt和PySidePyQt第一個(gè)說(shuō)的就是大名鼎鼎的 Qt。電腦桌面端開(kāi)發(fā)的黃金年代已經(jīng)逐漸遠(yuǎn)去,Qt 作為一員老將依然活躍于各種平臺(tái)和設(shè)備,經(jīng)久不衰。Qt 是使用 C++ 開(kāi)發(fā)的跨平臺(tái)應(yīng)用庫(kù)。使用 Qt開(kāi)發(fā)的不僅有 WPS office、QGIS、Autodesk Maya、OBS、Google Earth 等等知名軟件,甚至還有許多操作系統(tǒng)。而 PyQt 就是是 Qt 的 Python 語(yǔ)言版本的開(kāi)發(fā)接口。需要注意的是,PyQt 的性能肯定是比不上原生 Qt 的,但也足夠使用了,也沒(méi)有人會(huì)選擇使用 Python 去開(kāi)發(fā)超高性能軟件吧。PyQt5 是 Qt 的 v5 版本的對(duì)應(yīng)實(shí)現(xiàn),是目前最流行的版本。而最新版本是對(duì)應(yīng) Qt v6 版本的 PyQt6。Qt 是跨平臺(tái)的,同樣 PyQt 也是跨平臺(tái)的。開(kāi)發(fā)者可以在多個(gè)平臺(tái)上構(gòu)建程序,比如 Windows、Mac、Linux、iOS、Android 等。PyQt 包含了大約440個(gè)類(lèi)型、超過(guò)6000個(gè)的函數(shù)和方法。功能強(qiáng)大同時(shí)兼具有靈活性,比如用戶可以非常簡(jiǎn)單的設(shè)置各種窗口的顯示方式:懸浮、隱藏、重排列等。給予程序高度的自定義和靈活性。同時(shí)提供了 QtDesigner(Qt設(shè)計(jì)器),允許用戶在可視化的窗口以拖拽等方式直觀的設(shè)計(jì)調(diào)整程序界面。PyQt 在國(guó)內(nèi)也能找到較為詳細(xì)的中文教程,對(duì)想要入手學(xué)習(xí)但是英語(yǔ)捉急的朋友也是相當(dāng)友好的。總的來(lái)說(shuō),PyQt 功能強(qiáng)大,是一個(gè)重型武器,能實(shí)現(xiàn)一個(gè)現(xiàn)代 GUI 的所有功能,同時(shí)使用 Qt 能比較容易的做出漂亮美觀的程序(程序顏值很重要?。?。但是功能強(qiáng)大的一個(gè)普遍負(fù)作用就是程序沉重、大,PyQt 也不例外。你可以在通過(guò)使用命令 “pip install pyqt5” 安裝該 GUI 框架。PySide之前的 PyQt 是 Riverbank Computing 公司開(kāi)發(fā)。而 PySide 是 Qt 公司自己開(kāi)發(fā)的親兒子。由于 PySide 推出時(shí)間晚于 PyQt,目前中文文檔較為匱乏,使用人數(shù)也比不上。PySide 支持 Qt 4 PySide2 支持 Qt 5 PySide6 支持 Qt 6 而在2020年12月,Qt 公司推出了最新的 PySide6,支持 Qt6 版本。只有 Python3.6 后的版本支持 PySide6。PySide 盡管起步較晚,但是作為親兒子同時(shí)有 LGPL 協(xié)議的加持,可能會(huì)博得一些商業(yè)項(xiàng)目的青睞,未來(lái)很有可能超越 PyQt,當(dāng)然只是有可能。2.wxPython除了 PyQt,另外一個(gè)知名的第三方框架就是 wxPython。wxPython 也是一個(gè) Python 語(yǔ)言的 GUI 開(kāi)發(fā)框架,作為 Python 的擴(kuò)展模塊實(shí)現(xiàn),其內(nèi)部封裝的是 wxWidgets(C++ 語(yǔ)言開(kāi)發(fā)的跨平臺(tái)庫(kù))。wxPython 是跨平臺(tái)的、開(kāi)源、免費(fèi)的,可用組件眾多,借助這些組件,開(kāi)發(fā)者可以快速創(chuàng)建完整、功能全面的用戶界面,其應(yīng)用也是相當(dāng)廣泛。使用 wxPython 制作的初始界面是系統(tǒng)原生界面,也就是說(shuō)在沒(méi)有任何美化的前提下,系統(tǒng)長(zhǎng)什么樣,程序的按鈕、關(guān)閉鍵等等窗口和系統(tǒng)保持一致。(所以在Mac OS 下就很好看。)使用 wxPython 開(kāi)發(fā)的知名程序有BitTorrent,Google Drive、GRASS GIS等。你可以在通過(guò)使用命令 “pip install wxpython” 安裝該 GUI 框架。3.Tkinter在眾多的 GUI 框架中,最簡(jiǎn)單的那就是 Tkinter,Python自帶的標(biāo)準(zhǔn)庫(kù),對(duì)于 Python2 和 Python3 都有良好的適配版本。是一個(gè)跨平臺(tái)、輕量的、不需要額外安裝的 GUI 開(kāi)發(fā)框架。Tkinter 提供了最基本的 GUI 組件,最常用的有 Button(按鈕)、Frame(框組件)、Label(標(biāo)簽)、Text(文本)、File Dialog(文件對(duì)話框)、Canvas(圖形繪制組件)等,同時(shí)提供自帶的額外擴(kuò)展組件模塊 ttk,完全能夠滿足小型簡(jiǎn)單項(xiàng)目的開(kāi)發(fā)。這也是該篇文章的選擇,使用 Python 開(kāi)發(fā) GUI 程序簡(jiǎn)單,不需要額外安裝第三方包,避免了各種版本沖突等問(wèn)題,能讓我們將注意力放在程序的內(nèi)部實(shí)現(xiàn)上。盡管 Tkinter 咋一看還不錯(cuò),但是依然被很多人嫌棄,其中一個(gè)重要原因就是丑,連程序世界都不喜歡丑的,太慘了。但是有代碼的地方就有無(wú)限的可能,再丑也能變身成功。第一種方式就是通過(guò) Tkinter 自帶的可調(diào)節(jié)選項(xiàng)來(lái)修改或者使用自帶的 ttk 庫(kù)中的組件;第二種方式最簡(jiǎn)單便捷:直接使用 Tkinter 樣式庫(kù)。但是要找到支持Python2.7 并且滿意的樣式庫(kù)還是比較難的。最終我選擇了 ttkthemes 這個(gè)庫(kù)。效果如下:在該教程的后面會(huì)出單獨(dú)制作一篇美化教程,敬請(qǐng)期待!如果有朋友希望深入研究 Tkinter,推薦書(shū)籍《Python GUI Programming Cookbook》。4 其他如果你喜歡折騰、有大把時(shí)間學(xué)習(xí),想把 GUI 做的盡善盡美,不介意其龐大的體積的話,那么推薦 PyQt;如果你希望較快的構(gòu)建一個(gè)功能完善,同時(shí)具有較強(qiáng)的擴(kuò)展性和豐富的各類(lèi)組件,又不希望程序臃腫的話,wxPython 是你的好伙伴。如果你希望極速構(gòu)建一個(gè)程序又不介意界面的美丑(可以通過(guò)樣式庫(kù)美化,也很好看),上手快也不需要安裝任何東西同時(shí)程序輕量小巧,那么一定得試試 Tkinter。當(dāng)然 Python 平臺(tái)還有很多 GUI 框架,比如Kivy、PyGUI、Pyforms、PyGTK等,這里就不做詳細(xì)說(shuō)明了。
結(jié)束語(yǔ)
|
轉(zhuǎn)藏
分享
獻(xiàn)花(0)
+1