十大 Python GUI 框架比较

2023-05-16

图形用户界面 (GUI) 是任何 Web 应用程序中最重要的部分之一。有人会说最重要的部分,因为今天的老练用户很快就会放弃可用性差的应用程序。Python 应用程序也是如此。新手 Python 程序员在掌握了 Python 编程的基础知识后,通常会尝试构建 GUI。那时他们发现框架对于有效的 GUI 开发是必不可少的,但是 Python 并不缺少 GUI 框架。问题很快就变成了,哪一个最适合您的应用程序?

要回答这个问题,我们首先必须知道为什么 GUI 对您的应用程序很重要。

为什么 GUI 很重要?

您的 GUI 是您的应用程序的第一印象。如果你希望成功,就不能给人留下糟糕的第一印象。您将需要许多不同的图形元素,包括按钮、复选框、切换开关、下拉列表、搜索字段、滑块、工具提示等等——用户与应用程序提供的功能进行交互所需的一切。随意放置或没有吸引力的小部件无助于第一印象。 

安全性和性能也是决定应用程序质量和用户体验的关键因素。您会希望您的应用程序既快速又安全,但又不想为此牺牲 GUI。如果用户无法有效地与您的应用程序交互,您的用户群就会受到影响。

为什么 GUI 框架很重要?

开发框架旨在让开发人员的生活更轻松。它们使特定类型的应用程序更易于创建,或特定语言更易于使用。Python 的 GUI 框架使得为您的应用程序开发用户界面比尝试在 Python 中手动编写代码要容易得多。  

现在您知道要寻找什么了,我将倒数我认为是前十名的 Python GUI 框架。对于每一个,我将讨论它们独特的卖点,包括: 

  • 为什么你应该考虑使用它们 
  • 每一个都提供独特的优势
  • 您应该注意的框架限制

开始之前:安装我们的 GUI 框架即用型 Python 环境

开始测试 GUI 框架的最简单方法是为Windows或Linux安装我们的 GUI 框架 Python 环境,其中包含一个 Python 版本和本文中列出的大部分包。

为了下载即用型 GUI 框架 Python 环境,您需要创建一个 ActiveState Platform 帐户。只需使用您的 GitHub 凭据或您的电子邮件地址即可注册。注册很简单,它可以为您解锁 ActiveState 平台的许多好处!

或者您也可以使用我们的 State 工具来安装这个运行时环境。

对于 Windows 用户,在 CMD 提示符下运行以下命令以自动下载并安装我们的 CLI、State Tool 以及 GUI Frameworks 运行时到虚拟环境中:


powershell -Command "& $([scriptblock]::Create((New-Object Net.WebClient).DownloadString('https://platform.activestate.com/dl/cli/install.ps1'))) -activate-默认 Pizza-Team/GUI-Frameworks-Win”  

对于 Linux 用户,运行以下命令自动下载我们的 CLI、State Tool 以及 GUI Frameworks 运行时并将其安装到虚拟环境中:


sh <(curl -q https://platform.activestate.com/dl/cli/install.sh) --activate-default Pizza-Team/GUI-Frameworks  

10–PyGUI

Python GUI 项目,又名PyGUI框架,是一个简单的 API,供开发人员使用 Python 应用程序的本机元素创建用户界面。作为一个轻量级的 API,应用程序和目标平台之间不需要很多代码,这使得它比这个列表中的许多其他框架更高效。

优点:

  • 文档全部用 Python 编写
  • 在 Python 2 和 3 中可用
  • 支持其他 Python 扩展,如 OpenGL 和 GTK
  • 跨平台
  • 开源
  • 通过 pip 轻松安装

限制:

  • 未预装 Python

9-蜡

Wax是 wxPython 的包装器(请参阅此列表中的#3)。它提供与 wxPython 相同的功能,但用户友好得多。我还在这篇文章的底部提供了一个如何使用 Wax 的示例。

优点:

  • 开源
  • 跨平台
  • 便于使用

限制:

  • 未预装 Python

8–Pyforms 

Pyforms- GUI 是构成 Pyforms 主库一部分的软件层,其中还包括 PyForms-Web 和 PyForms-Terminal。Pyforms 是 Windows 窗体的 Python 实现,它允许您为 Windows GUI 模式、Web 模式和终端模式开发交互式界面。

优点:

  • 开源
  • 跨平台
  • 它具有最小的 API,因此只需几行 Python 代码即可轻松定义接口
  • 您还可以轻松编写高级功能代码
  • 代码被组织成模块,准备好被其他应用程序重用
  • 简化应用维护
  • 快速简单的原型设计
  • 低学习曲线
  • 使用 pip 轻松安装

限制:

  • 仅适用于 Python3,并且未预装
  • 不适合处理表单中的大量数据字段
  • 显示记录属性值,但不支持调用被浏览对象的方法函数
  • 它不能显示动态计算的属性

7–PySimpleGUI

PySimpleGUI创建于 2008 年,旨在使 Python 中的 GUI 开发更易于访问。名字里有什么?好吧,正如名字所暗示的那样,这是一个专门为 Python GUI 开发的绝对初学者编写的 GUI 框架。

优点:

  • 开源
  • 跨平台
  • 蟒蛇3
  • 易于通过 pip 安装
  • 简单易学
  • 提供大量文档和教程,是开始学习 GUI 设计的好方法

限制:

  • 真的应该只用于简单的 GUI 开发
  • 缺少表单设计器

6–图书馆

Libavg是一个很棒的 Python GUI 框架,专门用于构建基于触摸的界面。它是用 C++ 构建的,可实现快速执行时间,这在处理基于触摸的界面时是必需的。

优点:

  • 开源
  • 跨平台
  • 支持触摸屏的通用驱动程序
  • 广泛的功能,包括相机和动画支持,以及 GPU 效果和文本对齐
  • 为不同的可视化操作技术提供屏幕布局引擎
  • 同时支持 Python 2.7 和 3

限制:

  • 未预装 Python

5–基维

Kivy是一个跨平台的开源 Python 库(基于 Python 和 Cython),专为快速开发具有复杂 UI 的应用程序而设计,例如多点触控应用程序。Kivy 可在 Linux、Windows、OS X、Android、iOS 和 Raspberry Pi 上运行,您可以在所有这些平台上运行相同的代码。

“一次编码,在多个平台上运行”加上强大的图形技术(对 OpenGL ES 2 的内置支持)的使用相结合,使该框架适合 iOS 和 Android 应用程序的设计人员。

优点:

  • 开源
  • 麻省理工学院执照
  • 内置小部件
  • 跨平台

限制:

  • 未预装 Python

4–PySide2

PySide2是 Qt for Python,为 Qt 提供官方 Python 绑定。这使得在 Python 应用程序中使用 Qt API 以及绑定生成器工具 (Shiboken2) 以在 Python 中公开 C++ 项目成为可能。 

Qt 被认为是衡量所有其他 Python GUI 框架的 GUI 设计标准。因此,PySide2使 Python 开发人员能够访问经过验证的工具和库集合,以快速灵活地创建用户界面。

优点:

  • 通过 pip 轻松安装
  • 同时支持 Python 3 和 Python 2.7 
  • 跨平台
  • 广泛的社区支持和文档
  • 被 TomTom 和 Mercedes 等知名公司使用

限制:

  • 未预装 Python
  • 在 LGPL 下获得许可,这使得它在商业应用中的使用受到质疑,因为您需要提供源代码
  • Python 2.7 版本仅适用于 64 位版本的 MacOS 和 Linux。仅在 Python 2 上提供 Windows 32 位支持。

3–WxPython

wxPython是一个跨平台的 GUI 工具包,您可以使用它以简单易行的方式创建健壮、实用的 GUI。该实现是一组 Python 扩展模块,它们包装了 wxWidgets 跨平台库的 GUI 组件,该库是用 C++ 编写的。

wxPython 创建本机用户界面,为应用程序增加零额外开销,为您提供功能库的功能而没有负担。

优点:

  • 开源
  • 跨平台
  • 同时支持 Python 2.7 和 3
  • 使用简单
  • 使用 pip 顺利安装

限制:

  • 不是 MacOS 上预装 Python 的一部分

2–Tkinter

Tkinter是 Tcl 和 Python 标准 GUI 框架的组合,为您提供了为您正在处理的任何应用程序创建丰富 UI 所需的所有小部件,但它特别适合开发桌面应用程序。 

优点:

  • 如果您使用的是最新版本的 Python,则很可能已经安装了 Tkinter
  • Tkinter 提供了大量众所周知的小部件,包括所有最常见的小部件,如按钮、标签、复选框等。
  • 向每个小部件添加代码非常简单

限制:

  • 基本的 Tkinter 小部件很好,但您需要确保您的 Tkinter 版本也支持扩展的 Ttk 小部件集

1–PyQt5

PyQt5是 Python 编码人员和 UI 设计人员都使用的非常著名的 GUI 框架。其中一个组件 PyQt 包是围绕 Qt 框架构建的,Qt 框架是一种领先的跨平台 GUI 设计工具,几乎适用于任何类型的应用程序。PyQt5 包有一组详细的基于 Qt 应用程序框架最新版本 (v5) 的 Python 绑定。它还为连接到数据库提供 SQL 支持。

使用 QtGUI 和 QtDesigner 模块创建 GUI 非常容易,提供了大量的可视化元素,只需拖放小部件即可实现。

优点:

  • 用于实现视觉元素的拖放功能
  • 将代码添加到视觉元素,以创建小型和大型应用程序
  • 跨平台支持 Windows、Mac、Android 和 Raspberry Pi
  • 使用 pip 轻松安装

限制:

  • 不是免费的!PyQt5 需要您购买商业许可证。
  • 未预装 Python
  • 仅支持 Python 3

结论:哪个 Python GUI 框架最好?

长话短说:这取决于您的需求!例如:

  • 对于绝对初学者:我建议从 PySimpleGUI 开始。这个框架很容易遵循,并且有很多文档可以帮助您了解使用 Python 进行 GUI 设计和开发。
  • 如果您发现 PySimpleGUI 过于局限:尝试一些更完整的东西,比如 wxPython。它在易于使用的框架中提供了一组更好的控件,尽管它的包装器 (Wax) 对用户更友好。任何一个都可以比 PySimpleGUI 更上一层楼——选择权在你。
  • 以设计为中心的程序员:热衷于 GUI 设计?尝试 PyQt5、Tkinter 或 PySide 2。所有这些都将为您提供非常灵活的控件,因此您可以构建您梦想中的 UI。但是,请记住 PyQt5 和 PySide 2 将要求您购买许可证。
  • 触摸屏用户界面:需要触摸屏应用程序的用户界面吗?Kivy 和 Libavg 是你最好的选择。如果快速执行时间对你很重要,我会推荐 Libavg。另一方面,如果视觉设计至关重要,请坚持使用 Kivy。
  • 表单驱动的 UI:如果你的应用程序是表单驱动的,Pyforms 是一个不错的选择。否则 Pyforms 很难推荐。
  • Python 2:如果您仍在使用 Python 2,您可以尝试许多 GUI 框架,包括 PyGUI、PySide 2 和 wxPython。但是,您应该知道 Python 2 不再受到 Python 软件基金会或 Python 社区的官方支持。如果您需要 Python 2 支持,请查看我们的扩展支持。 

对我来说,最好的 UI 框架是 Wax,它是 wxPython 的用户友好版本。它具有用于 GUI 开发的有效 Python 框架的所有特征,而没有许多更复杂解决方案的附加功能。但是,如果您需要高级图形和设计元素,那么您可能应该尝试 PyQt5、Tkinter 或 PySide 2。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

十大 Python GUI 框架比较 的相关文章

  • 使用请求验证 SSL 证书

    我正在尝试验证 SSL 但它不起作用 我在浏览器上访问了我想要访问的机密网站 在 Chrome 上 我单击了储物柜 gt 证书 gt 详细信息 gt 复制到文件 gt base64 gt cert cer 我的代码是 test reques
  • 在 Pandas 中按日期获取有效合约

    我在检测 pandas DataFrame 中的活动合约方面遇到了一些困难 假设每一行都是一个协商 对于每一行 我有两列 initial date 和 end date 我想知道的是按日期划分的活跃合约数量 到目前为止我做了一个非常低效的方
  • 在 Python 中使用 Selenium 处理“接受 Cookie”弹出窗口

    我一直在尝试用硒抓取这个房地产网站的一些信息 但是 当我访问该网站时 我需要接受 cookie 才能继续 这仅在机器人访问网站时发生 而不是在我手动执行时发生 当我尝试通过 xpath 或 id 查找相应的元素时 正如我在手动检查页面时找到
  • 从正在运行的 python 脚本检测优化标志是否为 -O 或 -OO

    有时我想生成一个子进程 其优化标志与启动父进程时使用的优 化标志相同 我可以使用类似的东西 optimize not debug 但这样我就可以匹配两者 O and OO flags 是否有一些 python 内部状态包含该信息 经过一番深
  • 在 Numpy 中切片后确定结果数组的形状

    我很难理解在 numpy 中切片后如何确定结果数组的形状 例如 我使用以下简单代码 import numpy as np array np arange 27 reshape 3 3 3 slice1 array 1 2 1 slice2
  • Tensorflow 可变图像输入大小(自动编码器、放大......)

    Edit WARNING不建议使用不同图像大小的图像 因为张量需要具有相同的大小才能实现并行化 我一直在寻找解决方案 了解如何使用不同大小的图像作为神经网络的输入 Numpy 第一个想法是使用numpy 然而 由于每个图像的大小不同 我无法
  • 可以在 TensorFlow 中使用排名相关作为成本函数吗?

    我正在处理偶尔充满异常值的极其嘈杂的数据 因此我主要依靠相关性来衡量我的神经网络的准确性 是否可以明确使用诸如等级相关性 斯皮尔曼相关系数 之类的东西作为我的成本函数 到目前为止 我主要依赖 MSE 作为相关性的代理 我现在面临三个主要障碍
  • 为什么 Python 中的“pip install”会引发语法错误?

    我正在尝试使用 pip 安装软件包 我试着跑pip install从Python shell 但我得到了SyntaxError 为什么我会收到此错误 如何使用 pip 安装软件包 gt gt gt pip install selenium
  • “char”/“character”类型的类型提示

    char 或 character 没有内置的原始类型 因此显然必须使用长度为 1 的字符串 但是为了暗示这一点并暗示它应该被视为一个字符 如何通过类型提示来实现这一点 grade chr A 一种方法可能是使用内置的 chr 函数来表示这一
  • Python Kivy - 在本机网络浏览器中打开 url 的应用程序

    我尝试制作一个简单的应用程序 在单击 Screen One 上的按钮后 在 Kivy 中打开一个网页 我使用了这个主题 Python 在应用程序中直接显示网络浏览器 iframe https stackoverflow com questi
  • Python 中的 @staticmethod 与 @classmethod

    方法和方法有什么区别装饰的 https peps python org pep 0318 with staticmethod http docs python org library functions html staticmethod和
  • 如何在Python和Selenium中通过标签名称或id获取元素[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Python 和 Selenium 获取输入 但它向我显示错误 我该如何解决这个错误 inputElement send keys getStock getStocklFunc 0 Error i
  • 在可编辑的QSqlQueryModel中实现setEditStrategy

    这是后续这个问题 https stackoverflow com questions 49752388 editable qtableview of complex sql query 在那里 我们创建了 QSqlQueryModel 的可
  • conda-env list / conda info --envs 如何查找环境?

    我一直在尝试 anaconda miniconda 因为我的用户使用随 miniconda 安装的结构生物学程序 并且作者都没有 A 考虑到可能存在其他 miniconda 应用程序 B 他们的程序将在多用户环境中使用 因此 使用 Arch
  • select() 可以在 Windows 下使用 Python 中的文件吗?

    我正在尝试在 Windows 下运行以下 python 服务器 An echo server that uses select to handle multiple clients at a time Entering any line o
  • 在 MacO 和 Linux 上安装 win32com [重复]

    这个问题在这里已经有答案了 我的问题很简单 我可以安装吗win32com蟒蛇API pywin32特别是 在非 Windows 操作系统上 我一直在Mac上尝试多个版本pip install pywin32 都失败了 下面是一个例子 如果你
  • Flask WTForms 使用变量自动填充 StringField

    我有一个表格 我想用上一页收到的信息自动填充一些字段 但如果他们想调整它 它需要是可更改的 我正在为我的 SelectField 使用动态创建的列表 但添加 StringField 并不成功 请参阅下面的我的代码 forms py clas
  • 张量流:注册 numpy bfloat16 扩展

    正如我所见 tensorflow 中有 bfloat16 的 numpy 扩展 https github com tensorflow tensorflow blob 24ffe9f729160a095a5cab8f592392018280
  • Python 3.2 中 **kwargs 和 dict 有什么区别?

    看起来Python的很多方面都只是功能的重复 除了我在 Python 中的 kwargs 和 dict 中看到的冗余之外 还有什么区别吗 参数解包存在差异 许多人使用kwargs 并通过dict作为论据之一 使用参数解包 Prepare f
  • 如何在sphinx中启用数学?

    我在用sphinx http sphinx pocoo org index html与pngmath http sphinx pocoo org ext math html module sphinx ext pngmath扩展来记录我的代

随机推荐

  • E: Unable to correct problems, you have held broken packages

    E Unable to correct problems you have held broken packages 问题 xff1a apt install libmysqlclient dev Reading package lists
  • 【MySQL】mysqldump 数据库备份mysqldump: Got error: 1449: The user specified as a definer ('root'@'%') do......

    在Linux中使用corntab 定时备份MySQL数据库 xff0c 后期因考虑安全性问题 xff0c 删除掉了 root 64 用户 xff0c 发现环境上备份报错了 mysqldump Warning Using a password
  • Android 同个工程 复制后生成两个不同的apk

    需求 xff1a 同时运行两个完全相同工程 xff0c 我们会发现手机上面只有一个apk文件 xff1f 解决 xff1a 其实我们可以改变一个工程里面的build gradle中的applicationId 的值就可以了 等再次运行两个工
  • Linux下Centos7 安装 docker总结

    本片博客只介绍在linux系统上的安装方法 本文使用 CentOS 7 6 版本 1 root权限更新Yum包 xff08 linux命令不熟悉的同学本文建议使用root权限登陆安装docker xff0c 省去很多不必要麻烦 xff09
  • 完美解决KindEditor手机弹出框显示问题

    完美解决KindEditor手机弹出框显示问题 kindeditor是非常方便简单使用的富文本编辑器 xff0c 也很符合国人的习惯 xff0c 尤其是表情等应用 xff0c 但是kindedtor在手机上的显示也是一个比较头疼的问题 xf
  • Ubuntu 18.04 设置开机自启脚本

    一 背景 同伴在频繁更新系统环境 xff0c 需要经常使用reboot命令重启 xff0c 但每次重启后端Jar都会停止 xff0c 每次重启都需要手动启动Web后端Jar包 针对此种情况 xff0c 想到了采用开机自动启动Jar包的方法来
  • 本地打印机获取以及文件打印 java

    选择相应的文件进行打印 span class hljs comment 打印文件的选择 span JFileChooser fileChooser 61 span class hljs keyword new span JFileChoos
  • sqlite 句柄-sqlite 基础教程(3)

    要操纵一个数据库你就得有一个这个数据库的句柄 又碰到这个难以理解的词了 xff0c 不过确实还没得一个更好的词来替代它 其实你跟本不需要去在乎这个词叫什么 xff0c 你只要搞清楚他是一个什么玩意儿 就如同鞋子为什么叫鞋子 xff0c 仔细
  • Python justswap自动化交易

    因为平时要在justswap上做一些自动化交易 xff0c 网上资料很少 xff0c 看了justswapapi文档之后 xff0c 发现只需要调用合约的方式就可以了 遂共享出自己的代码 span class token keyword f
  • RabbitMq学习笔记(五)—— Topic

    ReceiveTopicOne 匹配规则 span class hljs number 1 span span class hljs comment 声明交换器和队列 span channel exchangeDeclare EXCHANG
  • ViewBinding - Jetpack 视图绑定委托封装及使用示例

    通过视图绑定功能 xff0c 您可以更轻松地编写可与视图交互的代码 在模块中启用视图绑定之后 xff0c 系统会为该模块中的每个 XML 布局文件生成一个绑定类 绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用 在大多数情况下
  • LiveData 的生命周期 - viewLifecycleOwner / this

    在给定所有者的生命周期内将给定的观察者添加到观察者列表中 事件在主线程上调度 如果 LiveData 已经有数据集 xff0c 它将被传递给观察者 方法 xff1a observe LifecycleOwner Observer 使用示例
  • 设计模式——生产者消费者模式

    1 基本概括 2 主要介绍 2 1 概念 生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题 生产者和消费者彼此之间不直接通讯 xff0c 而通过阻塞队列来进行通讯 xff0c 所以生产者生产完数据之后不用等待消费者处理 xff
  • Arch linux安装deepin-wine和微信(wechat)

    一 保证有国内的镜像源 xff0c 不然下载很慢 xff0c 没有国内包的镜像源 xff0c 则软件列表会少很多国内的软件 如果没有国内镜像源 xff0c 请修改镜像源 sudo vim etc pacman d mirrorlist s
  • KVM虚拟化(一)

    一 KVM虚拟化架构 1 主流虚拟机架构 图中对比了几种主流虚拟化技术架构 xff1a ESXi Xen与KVM xff0c 其主要差别在与各组件 xff08 CPU 内存 磁盘与网络IO xff09 的虚拟化与调度管理实现组件有所不同 在
  • docker Centos 7 安装 xfce4 桌面 + x11vnc + novnc

    docker Centos 7 安装 xfce4 桌面 43 x11vnc 43 novnc 启动容器环境变量xfce4 桌面安装 启动 Xvfb安装 启动 xfce4 桌面 x11vnc安装 x11vnc启动 x11vnc novnc 上
  • linux C++ 环境下的ActiveMQ学习

    ActiveMQ 1 概述 ActiveMQ 是Apache出品 xff0c 最流行的 功能强大的即时通讯和集成模式的开源服务器 ActiveMQ 是一个完全支持JMS1 1和J2EE 1 4规范的 JMS Provider实现 提供客户端
  • LUbuntu16.10安装及自动使用root登录(Ubuntu类似)

    LUbuntu是一款新的轻量级Ubuntu发行版 xff0c 结合LXDE使得LUbuntu安装 运行速度极快 xff0c 硬件资源要求很低 xff0c 支持X86和ARM架构处理器 可以在http lubuntu net 根据自己电脑的系
  • 【源码分享】-wpf界面源代码分享

    好久以前做过一段时间的界面编程 C 43 43 C Wpf的都做过一点 xff0c 见 个人博客中UI类目 所以资料里面关于界面编程的代码会多一些 xff0c 有时间就整理发出来共享学习 13年的时候用WPF写过一个简单的小程序作爬虫来获取
  • 十大 Python GUI 框架比较

    图形用户界面 GUI 是任何 Web 应用程序中最重要的部分之一 有人会说最重要的部分 xff0c 因为今天的老练用户很快就会放弃可用性差的应用程序 Python 应用程序也是如此 新手 Python 程序员在掌握了 Python 编程的基