前言
本文介紹利用Python開發(fā)GUI應(yīng)用程序時(shí)幾種常見的跨平臺(tái)Python GUI庫(kù)。
注:本文基本開發(fā)環(huán)境配置為:
- Window7(64位)
- Python 3.8.5
- 以及各類Python GUI庫(kù)
本次分享內(nèi)容的目錄如下:
前言
基本概念(CLI、GUI、GUI庫(kù)、Python GUI庫(kù))
基于Tk的Tkinter(簡(jiǎn)介、特點(diǎn)、應(yīng)用、簡(jiǎn)單示例)
基于wxWidgets的wxPython(簡(jiǎn)介、特點(diǎn)、應(yīng)用、安裝、示例)
基于Qt的PyQt(簡(jiǎn)介、特點(diǎn)、應(yīng)用、安裝、示例)
基于Qt的PySide2(Qt for Python)(簡(jiǎn)介、特點(diǎn)、應(yīng)用、安裝、示例)
基于GObject的PyGObject(簡(jiǎn)介、特點(diǎn)、應(yīng)用、安裝、示例)
結(jié)束語
1. 基本概念
在文章開始,我們先來理清幾個(gè)重要概念:
1.1 CLI(命令行界面)
CLI 是 Command-Line Interface 的英文簡(jiǎn)稱,中文意思為命令行界面(或命令行接口),是指用戶通過鍵盤方式來顯示計(jì)算機(jī)操作界面(接口)。用戶通過鍵盤輸入指令,計(jì)算機(jī)接收到指令后,予以執(zhí)行,并在顯示器上輸出相關(guān)信息。
下面是 windows 系統(tǒng)上一個(gè)典型的 CLI 程序 (Windows PowerShell) 運(yùn)行時(shí)的示意圖:
在1973年以前,用戶都是通過命令行界面(CLI)方式顯示計(jì)算機(jī)操作界面的。命令行界面的程序通常需要用戶記憶操作的命令。
1.2 GUI(圖形用戶界面)
GUI 是 Graphical User Interface 的英文簡(jiǎn)稱,中文意思為圖形用戶界面(或圖形用戶接口),是指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面,是一種人與計(jì)算機(jī)通信的界面交互方式。
在 GUI(圖形用戶界面)中,用戶看到和操作的都是圖形對(duì)象(計(jì)算機(jī)屏幕上顯示窗口、菜單、圖標(biāo)、按鈕、對(duì)話框等),用戶通過鼠標(biāo)等輸入設(shè)備進(jìn)行操縱,以完成不同的動(dòng)作目的(如運(yùn)行程序、打開文件等)。
下面是類Unix系統(tǒng) X Window System上 GUI 之一的 KDE Plasma Desktop 運(yùn)行時(shí)的示意圖:
與早期計(jì)算機(jī)使用的命令行界面相比,圖形界面對(duì)于用戶來說在視覺上更易于接受,學(xué)習(xí)成本大幅下降,也讓計(jì)算機(jī)的大眾化得以實(shí)現(xiàn)。
不過由于命令行界面要較圖形用戶界面節(jié)約計(jì)算機(jī)系統(tǒng)的資源,在熟記命令的前提下,使用命令行界面往往要較使用圖形用戶界面的操作速度要快,所以在現(xiàn)在的圖形用戶界面的操作系統(tǒng)中,通常都保留著可選的命令行界面。
1.3 GUI庫(kù)
GUI 庫(kù)也稱部件工具箱(Widget Toolkits),是指在程序設(shè)計(jì)時(shí)某些基本的GUI的組件元素的集合。它們一般以庫(kù)或者應(yīng)用程序框架的形式出現(xiàn)。
GUI 庫(kù)包含一組部件(Widget),部件是一系列圖形控制元素的集合(如:按鈕、標(biāo)簽、文本框等)。在構(gòu)建GUI程序時(shí),通常使用層疊方式,眾多圖形控制元素直接疊加起來。
GUI 庫(kù)分為偏底層的GUI庫(kù)和更高級(jí)的GUI庫(kù)。
常見的偏底層的GUI庫(kù)有:
- WIndows API
- X Window System 中包含了許多基本的部件,但通常需要通過Motif、GTK+或者Qt來使用
常見的更高級(jí)的GUI庫(kù)有:
- Windows平臺(tái):
- MFC(Microsoft Foundation Classes):是Windows API的封裝。
- Windows Forms:.NET的庫(kù)類集,可進(jìn)行GUI控制。
- 跨平臺(tái)(基于C或者C++,也經(jīng)常與其他編程語言綁定):
- Tk , Tcl 以及其他高級(jí)腳本語言用到的工具集(在Python中的接口是Tkinter)
- GTK+ :主要針對(duì)X Window System,用于GNOME桌面環(huán)境。
- Qt:可用于Unix/linux(X Window)、MS Windows、mac OS X、Windows CE以及Embedded Linux,用于KDE桌面環(huán)境。
- wxWidgets(以前是wxWindows):針對(duì)C++、Python以及Perl的跨平臺(tái)工具集。
- FLTK:跨平臺(tái)工具集,特點(diǎn)是小而快。
- 跨平臺(tái)(基于JAVA)
- AWT(Abstract Windowing Toolkit):用于Java程序,通常在選定的平臺(tái)下運(yùn)行另一個(gè)工具集。
- SWing:AWT的替代品。
- SWT(Standard Widget Toolkit):Java的本地部件工具集,是Eclipse項(xiàng)目的一部分。SWT運(yùn)行相應(yīng)平臺(tái)下的部件工具集(如Windows API,或者GTK+)。
1.4 Python GUI庫(kù)
當(dāng)我們使用Python語言編寫GUI應(yīng)用程序時(shí),一般不會(huì)自己從最底層去實(shí)現(xiàn),通常會(huì)使用更高層次的Python GUI庫(kù)來完成。
由于Python的廣泛流行,目前有眾多優(yōu)秀的 Python GUI庫(kù)可供開發(fā)者選擇,如:基于Qt的PyQt5、基于Qt的Qt for Python(PySide2)、基于wxWidgets的wxPython、基于Tk的Tkinter、基于GObject的PyGObject等。
下面就為各位朋友們簡(jiǎn)要介紹這幾種常見的跨平臺(tái)Python GUI庫(kù)。
2 基于Tk的Tkinter
首先介紹的是基于Tk GUI庫(kù)的Tkinter。因?yàn)?strong>Tkinter是Python語言內(nèi)置的GUI庫(kù)。
2.1 Tkinter簡(jiǎn)介
Tk是一個(gè)由C語言編寫的輕量級(jí)的跨平臺(tái)GUI庫(kù)。Tkinter(也稱Tk接口)是標(biāo)準(zhǔn)的Tk GUI庫(kù)的Python接口。
借助Tkinter,Python開發(fā)人員可以快速地創(chuàng)建跨平臺(tái)的簡(jiǎn)單的 GUI 應(yīng)用程序。
2.2 Tkinter特點(diǎn)
- Python內(nèi)置庫(kù),無需額外安裝,隨時(shí)使用
- 功能全面,學(xué)習(xí)和應(yīng)用簡(jiǎn)單,開發(fā)速度快
- 適用開發(fā)不太復(fù)雜的GUI應(yīng)用程序
2.3 Tkinter典型應(yīng)用
Python自帶的IDLE應(yīng)用程序就是用Tkinter編寫的,示意如下:
2.4 Tkinter簡(jiǎn)單示例
一、示例代碼:
# 文件名:example_Tkinter.py
from tkinter import *
root = Tk()
root.title("TkinterWindow")
root.geometry("400x100")
label = Label(root, text="這是一個(gè)Tkinter窗口!").pack(expand=True)
root.mainloop()
二、示例運(yùn)行效果:
3 基于wxWidgets的wxPython
3.1 wxPython簡(jiǎn)介
wxWidgets是一個(gè)由C++語言編寫的跨平臺(tái)GUI庫(kù)。wxPython是對(duì)wxWidgets的Python封裝/綁定,可以Python模塊的方式提供給開發(fā)者使用。
借助wxPython,Python開發(fā)人員可以很方便地創(chuàng)建跨平臺(tái)的,具有健壯、功能強(qiáng)大的GUI應(yīng)用程序。
wxPython是一款開源軟件,是Tkinter的一個(gè)比較流行的替代品,功能上面要強(qiáng)于Tkinter。wxPython提供了超過200個(gè)類,面向?qū)ο蟮木幊田L(fēng)格,設(shè)計(jì)的框架類似于MFC。
項(xiàng)目信息:
(1)項(xiàng)目主頁(yè):https://wxpython.org/
(2)項(xiàng)目(PyPI)網(wǎng)址:https://pypi.org/project/wxPython/
(3)項(xiàng)目最新版本:v4.1.0(2020/04/25)
3.2 wxPython特點(diǎn)
- 程序簡(jiǎn)單
- 易于編寫
- 易于理解
- 針對(duì)大型GUI應(yīng)用程序具有較強(qiáng)的優(yōu)勢(shì)
3.3 wxPython典型應(yīng)用
- GRASS GIS,一種免費(fèi)且開源的地理信息系統(tǒng)桌面應(yīng)用程序(如下圖示)。
- BitTorrent,一種點(diǎn)對(duì)點(diǎn)的BitTorrent應(yīng)用程序。
- google Drive,Google云端存儲(chǔ)系統(tǒng)的桌面客戶端。
- PlayOnLinux,一個(gè)Wine軟件兼容層的圖形化前端應(yīng)用程序。
- 等
3.4 wxPython模塊安裝
可以在終端通過 pip install wxPython 命令完成 wxPython 模塊的安裝,如下:
PS C:> pip install wxPython
Collecting wxPython
Downloading wxPython-4.1.0-cp38-cp38-win_amd64.whl (17.9 MB)
Requirement already satisfied: numpy; python_version >= "3.0" in c:developpythonlibsite-packages (from wxPython) (1.19.1)
Requirement already satisfied: six in c:developpythonlibsite-packages (from wxPython) (1.15.0)
Requirement already satisfied: pillow in c:developpythonlibsite-packages (from wxPython) (7.2.0)
Installing collected packages: wxPython
Successfully installed wxPython-4.1.0
PS C:>
3.5 wxPython簡(jiǎn)單示例
一、示例代碼:
# 文件名:example_wxPython.py
import wx
App = wx.App(False)
frame = wx.Frame(None, -1, title="wxPython", size=(400,160))
wx.StaticLine(frame, size=(400, 1))
wx.StaticText(frame, -1, "這是一個(gè)wxPython應(yīng)用程序!", pos=(80, 40))
frame.Show(True)
app.MainLoop()
二、示例運(yùn)行效果:
4 基于Qt的PyQt
4.1 PyQt簡(jiǎn)介
Qt是一款非常優(yōu)秀和知名的C++應(yīng)用程序開發(fā)框架,廣泛用于開發(fā)跨平臺(tái)GUI庫(kù),它體系龐大、接口豐富、文檔齊全。
PyQt提供了對(duì) Qt C++ GUI類庫(kù)封裝的Python綁定,可以Python模塊的方式提供給開發(fā)者使用。借助PyQt,Python開發(fā)人員可以很方便地創(chuàng)建各種美觀、復(fù)雜、功能強(qiáng)大的跨平臺(tái)的GUI應(yīng)用程序。
PyQt是一款自由軟件,其開發(fā)者是英國(guó)的“Riverbank Computing”公司。它提供了GPL與商業(yè)許可兩種授權(quán)方式:個(gè)人可以免費(fèi)地用于自由軟件的開發(fā),同時(shí)又可以提供良好的商業(yè)支持。PyQt已經(jīng)發(fā)展了很多年,技術(shù)比較成熟穩(wěn)定,技術(shù)文檔也比較豐富,具備靠前的影響力。PyQt3支持Qt1到Qt3;PyQt4支持Qt4;PyQt5支持Qt5。
項(xiàng)目信息:
(1)項(xiàng)目主頁(yè):https://www.riverbankcomputing.com/software/pyqt/
(2)項(xiàng)目(PyPI)網(wǎng)址:https://pypi.org/project/PyQt5/
(3)項(xiàng)目最新版本:v5.15.0(2020/06/01)
4.2 PyQt特點(diǎn)
- PyQt的API與Qt類似,Qt的文檔通常仍然可以應(yīng)用于PyQt,因此PyQt的開發(fā)文檔比較豐富。
- 可以通過Qt Designer工具使用拖拉式的方法來設(shè)計(jì)界面,簡(jiǎn)單易用。
- 在使用PyQt的過程中要注意避免內(nèi)存泄露以及懸掛指針。
- 運(yùn)行文件比較大。
- 需要掌握一些C++相關(guān)知識(shí)。
- 適合開發(fā)大型、復(fù)雜、商用GUI應(yīng)用程序。
4.3 PyQt5典型應(yīng)用
- Eric Python IDE:運(yùn)行截圖(如下圖示)
- Anki,:一個(gè)間隔重復(fù)抽認(rèn)卡桌面應(yīng)用程序
- QtiPlot,:一種分析和可視化科學(xué)數(shù)據(jù)的計(jì)算機(jī)桌面應(yīng)用程序
- 等
4.4 PyQt5庫(kù)安裝
可以在終端通過 pip install PyQt5 命令完成 PyQt5 庫(kù)的安裝,如下:
PS C:> pip install PyQt5
Collecting PyQt5
Downloading PyQt5-5.15.0-5.15.0-cp35.cp36.cp37.cp38-none-win_amd64.whl (64.5 MB)
Collecting PyQt5-sip<13,>=12.8
Downloading PyQt5_sip-12.8.0-cp38-cp38-win_amd64.whl (63 kB)
Installing collected packages: PyQt5-sip, PyQt5
Successfully installed PyQt5-5.15.0 PyQt5-sip-12.8.0
PS C:>
4.5 PyQt5簡(jiǎn)單示例
一、示例代碼:
# 文件名:example_PyQt5.py
import sys
from PyQt5.QtWidgets import *
app = QApplication(sys.argv)
win = QWidget()
win.resize(400, 100)
win.setWindowTitle('PyQt5')
label = QLabel("這是一個(gè)PyQt5應(yīng)用程序!", win)
win.show()
sys.exit(app.exec_())
二、示例運(yùn)行效果:
5 基于Qt的PySide2(Qt for Python)
5.1 PySide2簡(jiǎn)介
Qt是一款非常優(yōu)秀和知名的C++應(yīng)用程序開發(fā)框架,廣泛用于開發(fā)跨平臺(tái)GUI庫(kù),它體系龐大、接口豐富、文檔齊全。
PySide2(又稱Qt for Python)提供了對(duì) Qt C++ GUI類庫(kù)封裝的Python官方綁定,這樣就可以在Python應(yīng)用程序中使用Qt5的API(PySide2模塊提供對(duì)各個(gè)Qt模塊,如QtCore、QtGui、QtWidgets等的訪問),允許Python開發(fā)人員充分利用Qt的潛力來開發(fā)各種美觀、復(fù)雜、功能強(qiáng)大的跨平臺(tái)的GUI應(yīng)用程序。
歷經(jīng)了Trolltech->Nokia->Digia Plc->Qt Group多次沿革,目前的PySide2提供了GPL、LGPL與商業(yè)許可三種授權(quán)方式。
PySide2提供了與PyQt5類似的功能,區(qū)別在于另外提供了LGPL授權(quán)(意味著開發(fā)者可以免費(fèi)用于商業(yè))。
PySide2附帶一個(gè)Python綁定生成器Shiboken2(Qt for Python可以用它來創(chuàng)建PySide2模塊),可以把C++項(xiàng)目轉(zhuǎn)換為Python項(xiàng)目。
項(xiàng)目信息:
(1)項(xiàng)目主頁(yè):https://wiki.qt.io/PySide2
(2)項(xiàng)目(PyPI)網(wǎng)址:https://pypi.org/project/PySide2/
(3)項(xiàng)目最新版本:v5.15.0(2020/05/27)
5.2 PySide2特點(diǎn)
使用PySide2(Qt for Python)可以充分利用Qt的應(yīng)用程序開發(fā)框架和功能豐富的類設(shè)計(jì)GUI程序,主要有以下一些優(yōu)點(diǎn):
- 將Qt的跨平臺(tái)應(yīng)用框架與Python的跨平臺(tái)解釋語言結(jié)合在了一起。
- Qt使用信號(hào)與槽(Signals/Slots)機(jī)制進(jìn)行對(duì)象之間的通信,它是類型安全且弱耦合的,易于創(chuàng)建可重用的軟件模塊。
- 使用Qt Creator中的UI Designer或獨(dú)立的Qt Designer可以可視化地設(shè)計(jì)窗體,然后將窗體轉(zhuǎn)換為Python程序,可以大大提高界面設(shè)計(jì)的效率。
- 將Qt和Python的優(yōu)點(diǎn)結(jié)合到了一起,程序員可以利用Qt豐富的UI設(shè)計(jì)功能,但不需要使用復(fù)雜的C++語言,而是使用Python語言編程。
- 是Qt的“親兒子”,具備Qt官方支持
- 比較適合開發(fā)復(fù)雜、大型的GUI應(yīng)用軟件
當(dāng)然也存在一些相應(yīng)缺點(diǎn):
- 運(yùn)行文件比較大。
- 需要學(xué)習(xí)一些C++相關(guān)知識(shí),以便于閱讀開發(fā)文檔。
5.3 PySide2典型應(yīng)用
- Qt Designer:運(yùn)行截圖(如下圖示)
- 等
5.4 PySide2模塊安裝
可以在終端通過 pip install PySide2 命令完成 PySide2 模塊的安裝,如下:
PS C:> pip install PySide2
Collecting PySide2
Downloading PySide2-5.15.0-5.15.0-cp35.cp36.cp37.cp38-none-win_amd64.whl (139.6 MB)
Collecting shiboken2==5.15.0
Downloading shiboken2-5.15.0-5.15.0-cp35.cp36.cp37.cp38-none-win_amd64.whl (2.1 MB)
Installing collected packages: shiboken2, PySide2
Successfully installed PySide2-5.15.0 shiboken2-5.15.0
PS C:>
5.5 PySide2簡(jiǎn)單示例
一、示例代碼:
# 文件名:example_PySide2.py
import sys
from PySide2.QtWidgets import *
app = QApplication(sys.argv)
win = QWidget()
win.resize(400, 100)
win.setWindowTitle('PySide2')
QLabel("這是一個(gè)PySide2應(yīng)用程序!", win)
win.show()
sys.exit(app.exec_())
二、示例運(yùn)行效果:
6 基于GObject的PyGObject
6.1 PyGObject簡(jiǎn)介
GObject是一個(gè)在LGPL許可下發(fā)布的自由軟件庫(kù),它提供了一個(gè)輕便的對(duì)象系統(tǒng)并支持透明的多語言互通,可以直接使用在C程序中。GObject僅依賴于GLib和libc。它是GNOME的基石并且在GTK+,Pango,Accessibility Toolkit和大多數(shù)GNOME的高級(jí)庫(kù)和應(yīng)用程序中被廣泛使用。
PyGObject提供了基于 GObject的庫(kù)(例如GTK,GStreamer,WebKitGTK,GLib,GIO 等)封裝的Python綁定。PyGObject使用glib,gobject,girepository,libffi 和其他庫(kù)與隨附的 typelib 文件(Gtk-3.0.typelib)中的其他元數(shù)據(jù)結(jié)合使用來訪問C庫(kù)(libgtk-3.so),并動(dòng)態(tài)提供基于該信息的Python接口。
對(duì)于要使用GNOME編寫Python應(yīng)用程序或使用GTK編寫Python GUI應(yīng)用程序的開發(fā)人員,可以使用PyGObject很方便地創(chuàng)建各種美觀、復(fù)雜、功能強(qiáng)大的跨平臺(tái)的GUI應(yīng)用程序。
PyGObject是一款在LGPL許可下的跨平臺(tái)(支持Linux,Windows和macOS)的自由軟件,其作者是著名的GNOME開發(fā)者James Henstridge。
項(xiàng)目信息:
(1)項(xiàng)目主頁(yè):https://pygobject.readthedocs.io
(2)PyPI項(xiàng)目網(wǎng)址:https://pypi.org/project/PyGObject/
(3)項(xiàng)目最新版本:v3.36.1(2020/05/07)
6.2 PyGObject特點(diǎn)
- 功能強(qiáng)大
- 適合開發(fā)大型、復(fù)雜的GUI應(yīng)用程序
- 適合有GNOME/GTK+基礎(chǔ)的開發(fā)人員
- 對(duì)Linux系統(tǒng)更友好,在Windows系統(tǒng)安裝不方便
6.3 PyGObject典型應(yīng)用
- Pitivi-:一個(gè)免費(fèi)的開源視頻編輯器桌面應(yīng)用程序(如下圖示)
- Anaconda -Fedora,RHEL和其他Linux發(fā)行版使用的桌面安裝程序
- D-Feet-易于使用的D-Bus調(diào)試器
- Gaphor-一個(gè)簡(jiǎn)單的桌面建模工具
- GNOME Music - 一個(gè)GNOME桌面音樂播放器軟件
- 等
6.4 PyGObject安裝(Windows)
在運(yùn)行應(yīng)用程序之前,需要先行安裝PyGObject,GTK及其依賴項(xiàng)。
本機(jī)在終端通過pip install PyGObject命令進(jìn)行PyGObject模塊安裝時(shí)會(huì)報(bào)錯(cuò)失敗,故采用其官網(wǎng)推薦的Windows平臺(tái)安裝步驟進(jìn)行:
- Step1:通過http://www.msys2.org/下載安裝程序 msys2-x86_64-20200720.exe
- Step2:運(yùn)行安裝程序并安裝提示完成安裝(如安裝目錄為 C:msys64)。注:MSYS2需要64位Windows 7或更高版本。
- Step3:按照說明設(shè)置基本環(huán)境。
- Step4:運(yùn)行 C:msys64mingw64.exe 后會(huì)彈出一個(gè)終端窗口
- Step5:在本終端窗口執(zhí)行 pacman -Suy
- Step6:在本終端窗口執(zhí)行 pacman -S mingw-w64-x86_64-gtk3 mingw-w64-x86_64-python3 mingw-w64-x86_64-python3-gobject
驗(yàn)證測(cè)試:
- Step1:要測(cè)試 GTK 3 是否正常運(yùn)行,可以在本終端窗口運(yùn)行 gtk3-demo,會(huì)出現(xiàn)一個(gè)演示應(yīng)用程序。
使用方法:
- Step1:將 xxx.py 您創(chuàng)建的腳本復(fù)制到 C:msys64home<username>
- Step2:在本終端窗口運(yùn)行 python3 xxx.py,會(huì)出現(xiàn)相應(yīng)桌面應(yīng)用程序。
6.5 PyGObject簡(jiǎn)單示例
一、示例代碼:
# 文件名:example_PyGObject.py
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
window = Gtk.Window(title="PyGObject")
window.set_size_request(400, 100)
hbox = Gtk.Box(spacing=6)
window.add(hbox)
label = Gtk.Label("這是一個(gè)PyGObject應(yīng)用程序!")
hbox.pack_start(label, True, True, 0)
window.show_all()
window.connect("destroy", Gtk.main_quit)
Gtk.main()
二、示例運(yùn)行效果:
結(jié)束語
目前支持Python語言開發(fā)GUI應(yīng)用程序的Python GUI庫(kù)有幾十種(詳見Python Wiki頁(yè)面介紹:https://wiki.python.org/moin/GuiProgramming),限于篇幅,本文僅僅是概要介紹了最值得了解(個(gè)人淺見)的5種分享給大家,算是拋磚引玉,大家可以結(jié)合實(shí)際情況選擇一款適合的Python GUI庫(kù)來進(jìn)一步學(xué)習(xí)掌握應(yīng)用。
希望本文能對(duì)您有所幫助!喜歡的話就點(diǎn)個(gè)贊加關(guān)注支持一下哈:)






