本文介绍利用Python开发GUI应用程序时几种常见的跨平台Python GUI库。
注:本文基本开发环境配置为:
- 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(简介、特点、应用、安装、示例)
结束语
在文章开始,我们先来理清几个重要概念:
CLI 是 Command-Line Interface 的英文简称,中文意思为命令行界面(或命令行接口),是指用户通过键盘方式来显示计算机操作界面(接口)。用户通过键盘输入指令,计算机接收到指令后,予以执行,并在显示器上输出相关信息。
下面是 windows 系统上一个典型的 CLI 程序 (Windows PowerShell) 运行时的示意图:
在1973年以前,用户都是通过命令行界面(CLI)方式显示计算机操作界面的。命令行界面的程序通常需要用户记忆操作的命令。
GUI 是 Graphical User Interface 的英文简称,中文意思为图形用户界面(或图形用户接口),是指采用图形方式显示的计算机操作用户界面,是一种人与计算机通信的界面交互方式。
在 GUI(图形用户界面)中,用户看到和操作的都是图形对象(计算机屏幕上显示窗口、菜单、图标、按钮、对话框等),用户通过鼠标等输入设备进行操纵,以完成不同的动作目的(如运行程序、打开文件等)。
下面是类Unix系统 X Window System上 GUI 之一的 KDE Plasma Desktop 运行时的示意图:
与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受,学习成本大幅下降,也让计算机的大众化得以实现。
不过由于命令行界面要较图形用户界面节约计算机系统的资源,在熟记命令的前提下,使用命令行界面往往要较使用图形用户界面的操作速度要快,所以在现在的图形用户界面的操作系统中,通常都保留着可选的命令行界面。
GUI 库也称部件工具箱(Widget Toolkits),是指在程序设计时某些基本的GUI的组件元素的集合。它们一般以库或者应用程序框架的形式出现。
GUI 库包含一组部件(Widget),部件是一系列图形控制元素的集合(如:按钮、标签、文本框等)。在构建GUI程序时,通常使用层叠方式,众多图形控制元素直接叠加起来。
GUI 库分为偏底层的GUI库和更高级的GUI库。
常见的偏底层的GUI库有:
常见的更高级的GUI库有:
当我们使用Python语言编写GUI应用程序时,一般不会自己从最底层去实现,通常会使用更高层次的Python GUI库来完成。
由于Python的广泛流行,目前有众多优秀的 Python GUI库可供开发者选择,如:基于Qt的PyQt5、基于Qt的Qt for Python(PySide2)、基于wxWidgets的wxPython、基于Tk的Tkinter、基于GObject的PyGObject等。
下面就为各位朋友们简要介绍这几种常见的跨平台Python GUI库。
首先介绍的是基于Tk GUI库的Tkinter。因为Tkinter是Python语言内置的GUI库。
Tk是一个由C语言编写的轻量级的跨平台GUI库。Tkinter(也称Tk接口)是标准的Tk GUI库的Python接口。
借助Tkinter,Python开发人员可以快速地创建跨平台的简单的 GUI 应用程序。
Python自带的IDLE应用程序就是用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()
二、示例运行效果:
wxWidgets是一个由C++语言编写的跨平台GUI库。wxPython是对wxWidgets的Python封装/绑定,可以Python模块的方式提供给开发者使用。
借助wxPython,Python开发人员可以很方便地创建跨平台的,具有健壮、功能强大的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)
可以在终端通过 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:>
一、示例代码:
# 文件名: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()
二、示例运行效果:
Qt是一款非常优秀和知名的C++应用程序开发框架,广泛用于开发跨平台GUI库,它体系庞大、接口丰富、文档齐全。
PyQt提供了对 Qt C++ GUI类库封装的Python绑定,可以Python模块的方式提供给开发者使用。借助PyQt,Python开发人员可以很方便地创建各种美观、复杂、功能强大的跨平台的GUI应用程序。
PyQt是一款自由软件,其开发者是英国的“Riverbank Computing”公司。它提供了GPL与商业许可两种授权方式:个人可以免费地用于自由软件的开发,同时又可以提供良好的商业支持。PyQt已经发展了很多年,技术比较成熟稳定,技术文档也比较丰富,具备靠前的影响力。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)
可以在终端通过 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:>
一、示例代码:
# 文件名: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_())
二、示例运行效果:
Qt是一款非常优秀和知名的C++应用程序开发框架,广泛用于开发跨平台GUI库,它体系庞大、接口丰富、文档齐全。
PySide2(又称Qt for Python)提供了对 Qt C++ GUI类库封装的Python官方绑定,这样就可以在Python应用程序中使用Qt5的API(PySide2模块提供对各个Qt模块,如QtCore、QtGui、QtWidgets等的访问),允许Python开发人员充分利用Qt的潜力来开发各种美观、复杂、功能强大的跨平台的GUI应用程序。
历经了Trolltech->Nokia->Digia Plc->Qt Group多次沿革,目前的PySide2提供了GPL、LGPL与商业许可三种授权方式。
PySide2提供了与PyQt5类似的功能,区别在于另外提供了LGPL授权(意味着开发者可以免费用于商业)。
PySide2附带一个Python绑定生成器Shiboken2(Qt for Python可以用它来创建PySide2模块),可以把C++项目转换为Python项目。
项目信息:
(1)项目主页:https://wiki.qt.io/PySide2
(2)项目(PyPI)网址:https://pypi.org/project/PySide2/
(3)项目最新版本:v5.15.0(2020/05/27)
使用PySide2(Qt for Python)可以充分利用Qt的应用程序开发框架和功能丰富的类设计GUI程序,主要有以下一些优点:
当然也存在一些相应缺点:
可以在终端通过 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:>
一、示例代码:
# 文件名: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_())
二、示例运行效果:
GObject是一个在LGPL许可下发布的自由软件库,它提供了一个轻便的对象系统并支持透明的多语言互通,可以直接使用在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),并动态提供基于该信息的Python接口。
对于要使用GNOME编写Python应用程序或使用GTK编写Python GUI应用程序的开发人员,可以使用PyGObject很方便地创建各种美观、复杂、功能强大的跨平台的GUI应用程序。
PyGObject是一款在LGPL许可下的跨平台(支持Linux,Windows和macOS)的自由软件,其作者是著名的GNOME开发者James Henstridge。
项目信息:
(1)项目主页:https://pygobject.readthedocs.io
(2)PyPI项目网址:https://pypi.org/project/PyGObject/
(3)项目最新版本:v3.36.1(2020/05/07)
在运行应用程序之前,需要先行安装PyGObject,GTK及其依赖项。
本机在终端通过pip install PyGObject命令进行PyGObject模块安装时会报错失败,故采用其官网推荐的Windows平台安装步骤进行:
验证测试:
使用方法:
一、示例代码:
# 文件名: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语言开发GUI应用程序的Python GUI库有几十种(详见Python Wiki页面介绍:https://wiki.python.org/moin/GuiProgramming),限于篇幅,本文仅仅是概要介绍了最值得了解(个人浅见)的5种分享给大家,算是抛砖引玉,大家可以结合实际情况选择一款适合的Python GUI库来进一步学习掌握应用。
希望本文能对您有所帮助!喜欢的话就点个赞加关注支持一下哈:)