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