<返回更多

Python GUI编程之Python GUI库综述

2020-08-10    
加入收藏
Python GUI编程之Python GUI库综述

 

前言

本文介绍利用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(简介、特点、应用、安装、示例)

结束语


1. 基本概念

在文章开始,我们先来理清几个重要概念:

1.1 CLI(命令行界面)

CLI 是 Command-Line Interface 的英文简称,中文意思为命令行界面(或命令行接口),是指用户通过键盘方式来显示计算机操作界面(接口)。用户通过键盘输入指令,计算机接收到指令后,予以执行,并在显示器上输出相关信息。

下面是 windows 系统上一个典型的 CLI 程序 (Windows PowerShell) 运行时的示意图:

Python GUI编程之Python GUI库综述

 

在1973年以前,用户都是通过命令行界面(CLI)方式显示计算机操作界面的。命令行界面的程序通常需要用户记忆操作的命令。

1.2 GUI(图形用户界面)

GUI 是 Graphical User Interface 的英文简称,中文意思为图形用户界面(或图形用户接口),是指采用图形方式显示的计算机操作用户界面,是一种人与计算机通信的界面交互方式。

在 GUI(图形用户界面)中,用户看到和操作的都是图形对象(计算机屏幕上显示窗口、菜单、图标、按钮、对话框等),用户通过鼠标等输入设备进行操纵,以完成不同的动作目的(如运行程序、打开文件等)。

下面是类Unix系统 X Window System上 GUI 之一的 KDE Plasma Desktop 运行时的示意图:

Python GUI编程之Python GUI库综述

 

与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受,学习成本大幅下降,也让计算机的大众化得以实现。

不过由于命令行界面要较图形用户界面节约计算机系统的资源,在熟记命令的前提下,使用命令行界面往往要较使用图形用户界面的操作速度要快,所以在现在的图形用户界面的操作系统中,通常都保留着可选的命令行界面。

1.3 GUI库

GUI 库也称部件工具箱(Widget Toolkits),是指在程序设计时某些基本的GUI的组件元素的集合。它们一般以库或者应用程序框架的形式出现。

GUI 库包含一组部件(Widget),部件是一系列图形控制元素的集合(如:按钮、标签、文本框等)。在构建GUI程序时,通常使用层叠方式,众多图形控制元素直接叠加起来。

GUI 库分为偏底层的GUI库更高级的GUI库

常见的偏底层的GUI库有:

常见的更高级的GUI库有:

1.4 Python GUI库

当我们使用Python语言编写GUI应用程序时,一般不会自己从最底层去实现,通常会使用更高层次的Python GUI库来完成。

由于Python的广泛流行,目前有众多优秀的 Python GUI库可供开发者选择,如:基于QtPyQt5、基于QtQt for PythonPySide2)、基于wxWidgetswxPython、基于TkTkinter、基于GObjectPyGObject等。

下面就为各位朋友们简要介绍这几种常见的跨平台Python GUI库


2 基于Tk的Tkinter

首先介绍的是基于Tk GUI库Tkinter。因为Tkinter是Python语言内置的GUI库。

2.1 Tkinter简介

Tk是一个由C语言编写的轻量级的跨平台GUI库Tkinter(也称Tk接口)是标准的Tk GUI库的Python接口。

借助Tkinter,Python开发人员可以快速地创建跨平台的简单的 GUI 应用程序。

2.2 Tkinter特点

2.3 Tkinter典型应用

Python自带的IDLE应用程序就是用Tkinter编写的,示意如下:

Python GUI编程之Python GUI库综述

 

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()   

二、示例运行效果:

Python GUI编程之Python GUI库综述

 


3 基于wxWidgets的wxPython

3.1 wxPython简介

wxWidgets是一个由C++语言编写的跨平台GUI库wxPython是对wxWidgets的Python封装/绑定,可以Python模块的方式提供给开发者使用。

借助wxPython,Python开发人员可以很方便地创建跨平台的,具有健壮、功能强大的GUI应用程序。

wxPython是一款开源软件,是Tkinter的一个比较流行的替代品,功能上面要强于TkinterwxPython提供了超过200个类,面向对象的编程风格,设计的框架类似于MFC。

项目信息:

(1)项目主页:https://wxpython.org/

(2)项目(PyPI)网址:https://pypi.org/project/wxPython/

Python GUI编程之Python GUI库综述

 

(3)项目最新版本:v4.1.0(2020/04/25)

3.2 wxPython特点

3.3 wxPython典型应用

Python GUI编程之Python GUI库综述

 

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()

二、示例运行效果:

Python GUI编程之Python GUI库综述

 


4 基于Qt的PyQt

4.1 PyQt简介

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/

Python GUI编程之Python GUI库综述

 

(3)项目最新版本:v5.15.0(2020/06/01)

4.2 PyQt特点

4.3 PyQt5典型应用

Python GUI编程之Python GUI库综述

 

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_())

二、示例运行效果:

Python GUI编程之Python GUI库综述

 


5 基于Qt的PySide2(Qt for Python)

5.1 PySide2简介

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/

Python GUI编程之Python GUI库综述

 

(3)项目最新版本:v5.15.0(2020/05/27)

5.2 PySide2特点

使用PySide2Qt for Python)可以充分利用Qt的应用程序开发框架和功能丰富的类设计GUI程序,主要有以下一些优点:

当然也存在一些相应缺点:


5.3 PySide2典型应用

Python GUI编程之Python GUI库综述

 

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_())

二、示例运行效果:

Python GUI编程之Python GUI库综述

 


6 基于GObject的PyGObject

6.1 PyGObject简介

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/

Python GUI编程之Python GUI库综述

 

(3)项目最新版本:v3.36.1(2020/05/07)

6.2 PyGObject特点

6.3 PyGObject典型应用

Python GUI编程之Python GUI库综述

 

6.4 PyGObject安装(Windows)

在运行应用程序之前,需要先行安装PyGObject,GTK及其依赖项。

本机在终端通过pip install PyGObject命令进行PyGObject模块安装时会报错失败,故采用其官网推荐的Windows平台安装步骤进行:

验证测试:

使用方法:

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 GUI编程之Python GUI库综述

 


结束语

目前支持Python语言开发GUI应用程序的Python GUI库有几十种(详见Python Wiki页面介绍:https://wiki.python.org/moin/GuiProgramming),限于篇幅,本文仅仅是概要介绍了最值得了解(个人浅见)的5种分享给大家,算是抛砖引玉,大家可以结合实际情况选择一款适合的Python GUI库来进一步学习掌握应用。

希望本文能对您有所帮助!喜欢的话就点个赞加关注支持一下哈:)

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>