您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

Python GUI编程之Python GUI库综述

时间:2020-08-10 12:46:19  来源:  作者:
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库有:

  • 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桌面环境。
    • Qt:可用于Unix/linux(X Window)、MS Windows、mac OS X、Windows CE以及Embedded Linux,用于KDE桌面环境。
    • wxWidgets(以前是wxWindows):针对C++、Python以及Perl的跨平台工具集。
    • FLTK:跨平台工具集,特点是小而快。
  • 跨平台(基于JAVA
    • AWT(Abstract Windowing Toolkit):用于Java程序,通常在选定的平台下运行另一个工具集。
    • SWingAWT的替代品。
    • SWT(Standard Widget Toolkit):Java的本地部件工具集,是Eclipse项目的一部分。SWT运行相应平台下的部件工具集(如Windows API,或者GTK+)。

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特点

  • Python内置库,无需额外安装,随时使用
  • 功能全面,学习和应用简单,开发速度快
  • 适用开发不太复杂的GUI应用程序

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特点

  • 程序简单
  • 易于编写
  • 易于理解
  • 针对大型GUI应用程序具有较强的优势

3.3 wxPython典型应用

  • GRASS GIS,一种免费且开源的地理信息系统桌面应用程序(如下图示)。
Python GUI编程之Python GUI库综述

 

  • BitTorrent,一种点对点的BitTorrent应用程序。
  • google Drive,Google云端存储系统的桌面客户端。
  • 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()

二、示例运行效果:

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特点

  • PyQt的API与Qt类似,Qt的文档通常仍然可以应用于PyQt,因此PyQt的开发文档比较丰富。
  • 可以通过Qt Designer工具使用拖拉式的方法来设计界面,简单易用。
  • 在使用PyQt的过程中要注意避免内存泄露以及悬挂指针。
  • 运行文件比较大。
  • 需要掌握一些C++相关知识。
  • 适合开发大型、复杂、商用GUI应用程序。

4.3 PyQt5典型应用

  • Eric Python IDE:运行截图(如下图示)
Python GUI编程之Python GUI库综述

 

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

二、示例运行效果:

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程序,主要有以下一些优点:

  • 将Qt的跨平台应用框架与Python的跨平台解释语言结合在了一起。
  • Qt使用信号与槽(Signals/Slots)机制进行对象之间的通信,它是类型安全且弱耦合的,易于创建可重用的软件模块。
  • 使用Qt Creator中的UI Designer或独立的Qt Designer可以可视化地设计窗体,然后将窗体转换为Python程序,可以大大提高界面设计的效率。
  • 将Qt和Python的优点结合到了一起,程序员可以利用Qt丰富的UI设计功能,但不需要使用复杂的C++语言,而是使用Python语言编程。
  • 是Qt的“亲儿子”,具备Qt官方支持
  • 比较适合开发复杂、大型的GUI应用软件

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

  • 运行文件比较大。
  • 需要学习一些C++相关知识,以便于阅读开发文档。

5.3 PySide2典型应用

  • Qt Designer:运行截图(如下图示)
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特点

  • 功能强大
  • 适合开发大型、复杂的GUI应用程序
  • 适合有GNOME/GTK+基础的开发人员
  • 对Linux系统更友好,在Windows系统安装不方便

6.3 PyGObject典型应用

  • Pitivi-:一个免费的开源视频编辑器桌面应用程序(如下图示)
Python GUI编程之Python GUI库综述

 

  • Anaconda -Fedora,RHEL和其他Linux发行版使用的桌面安装程序
  • 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:按照说明设置基本环境。
  • Step4:运行 C:msys64mingw64.exe 后会弹出一个终端窗口
  • Step5:在本终端窗口执行 pacman -Suy
  • Step6:在本终端窗口执行 pacman -S mingw-w64-x86_64-gtk3 mingw-w64-x86_64-python3 mingw-w64-x86_64-python3-gobject

验证测试:

  • Step1:要测试 GTK 3 是否正常运行,可以在本终端窗口运行 gtk3-demo,会出现一个演示应用程序。

使用方法:

  • Step1:将 xxx.py 您创建的脚本复制到 C:msys64home<username>
  • Step2:在本终端窗口运行 python3 xxx.py,会出现相应桌面应用程序。

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库来进一步学习掌握应用。

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



Tags:Python GUI库   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前言本文介绍利用Python开发GUI应用程序时几种常见的跨平台Python GUI库。注:本文基本开发环境配置为:- Window7(64位)- Python 3.8.5- 以及各类Python GUI库本次分享内容的目...【详细内容】
2020-08-10  Tags: Python GUI库  点击:(84)  评论:(0)  加入收藏
▌简易百科推荐
近几年 Web3 被炒得火热,但是大部分人可能还不清楚什么是 Web3,今天就让w3cschool编程狮小师妹带你了解下 Web3 是什么?与我们熟知的 Web1 和 Web2 又有什么区别呢?web3.0什么是...【详细内容】
2022-07-15  编程狮W3Cschool    Tags:Web3.0   点击:(2)  评论:(0)  加入收藏
1、让我们一起来看下吧,直接上图。 第一眼看到是不是觉得很高逼格,暗黑画风,这很大佬。其实它就是------AidLearning。一个运行在安卓平台的linux系统,而且还包含了许多非常强大...【详细内容】
2022-07-15  IT智能化专栏    Tags:AidLearning   点击:(2)  评论:(0)  加入收藏
真正的大师,永远都怀着一颗学徒的心! 一、项目简介 今天说的这个软件是一款基于Python+vue的自动化运维、完全开源的云管理平台。二、实现功能 基于RBAC权限系统 录像回放 ...【详细内容】
2022-07-14  菜鸟程序猿    Tags:Python   点击:(3)  评论:(0)  加入收藏
前言今天笔者想和大家来聊聊python接口自动化的MySQL数据连接,废话不多说咱们直接进入主题吧。 一、什么是 PyMySQL?PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,P...【详细内容】
2022-07-11  测试架构师百里    Tags:python   点击:(18)  评论:(0)  加入收藏
aiohttp什么是 aiohttp?一个异步的 HTTP 客户端\服务端框架,基于 asyncio 的异步模块。可用于实现异步爬虫,更快于 requests 的同步爬虫。安装pip install aiohttpaiohttp 和 r...【详细内容】
2022-07-11  VT漫步    Tags:aiohttp   点击:(15)  评论:(0)  加入收藏
今天我们学习下 Queue 的进阶用法。生产者消费者模型在并发编程中,比如爬虫,有的线程负责爬取数据,有的线程负责对爬取到的数据做处理(清洗、分类和入库)。假如他们是直接交互的,...【详细内容】
2022-07-06  VT漫步    Tags:Python Queue   点击:(34)  评论:(0)  加入收藏
继承:是面向对象编程最重要的特性之一,例如,我们每个人都从祖辈和父母那里继承了一些体貌特征,但每个人却又不同于父母,有自己独有的一些特性。在面向对象中被继承的类是父类或基...【详细内容】
2022-07-06  至尊小狸子    Tags:python   点击:(25)  评论:(0)  加入收藏
点击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍。本文1553字,阅读约需4分钟 Hi,大家好,我是CoCo。在上一篇Python自动化测试系列文章:Python自动化测试之P...【详细内容】
2022-07-05  CoCo的软件测试小栈    Tags:Python   点击:(27)  评论:(0)  加入收藏
第一种方式:res = requests.get(url, params=data, headers = headers)第二种方式:res = requests.get(url, data=data, headers = headers)注意:1.url格式入参只支持第一种方...【详细内容】
2022-07-05  独钓寒江雪之IT    Tags:Python request   点击:(19)  评论:(0)  加入收藏
什么是python类的多态python的多态,可以为不同的类实例,或者说不同的数据处理方式,提供统一的接口。用比喻的方式理解python类的多态比如,同一个苹果(统一的接口)在孩子的眼里(类实...【详细内容】
2022-07-04  写小说的程序员    Tags:python类   点击:(28)  评论:(0)  加入收藏
站内最新
站内热门
站内头条