PyQt vs Tkinter – 更好的 GUI 库

2023-05-16

PyQt 和 Tkinter 的比较
在本文中,我将分享我自己使用两个 GUI 库 PyQt 和 Tkinter 的旅程和个人经验。我还对具有相同小部件的 Tkinter 和 PyQt GUI 进行了并排比较。

本文比较了两个 Python GUI 库PyQtTkinter

自从我加入了几个 Python 社区和社交媒体网站以来, PyQt 与 Tkinter的争论是我一直看到的。在本文中,我将分享我自己使用这两个 GUI 库的旅程和个人经验。

除了我的个人经验之外,我还对 Tkinter 和 PyQt GUI 与相同的小部件进行了并排比较。大多数 GUI 具有相同的小部件,如标签、按钮、检查按钮和菜单,因此这使得比较容易得多。

在本文结束时,这两个库之间的区别将变得清晰。如果您还没有开始使用任何一种,本文将帮助您做出决定。

特金特

第一印象

Tkinter 是我开始使用的第一个 GUI 库。我不知道任何其他的 GUI 库,比如 PyQt。很多简单的项目我都用过Tkinter,体验还不错。它是Python 标准库的一部分,因此您也不必担心下载和安装它。它很容易学习,到最后我可以在 10 分钟内创建一个简单的 GUI,其中包含几个功能强大的小部件。

小部件

甚至在我遇到其他 GUI 库之前,Tkinter 的小部件就感觉相当过时了。它们让我想起了我会在 2000 年代的软件中看到的那种 GUI。我在 Tkinter 上遇到的另一个问题是轻微的屏幕模糊问题,我不得不使用ctypes 库来解决这个问题。

然而,抛开外观不谈,Tkinter 有相当多的小部件和对菜单的支持。Tkinter 相当独特的一个小部件是Canvas 小部件,它就像一个绘图板,您可以在其中显示图像和绘制图形等。总的来说,如果您将外观放在一边,Tkinter 在小部件类别中的表现相当不错。

各种各样的

Tkinter有一个名为的特殊模块ttk,它与Tkinter 8.5. 该ttk模块有自己的 Button、Check Button、Entry、Frame 和更多 Widget。导入此模块将自动覆盖 Tkinter 变体。这些ttk小部件具有更现代和时尚的外观,并且与 Tkinter 完全兼容。

您可以通过我们的Tkinter 教程系列开始学习 Tkinter 。

PyQt

第一印象

随着我的编程知识和外展能力的增长,我开始听说其他 GUI 库。我有时会遇到人们要求提供比 Tkinter 更“现代”外观的图书馆的帖子和问题。其他有经验的开发人员经常会推荐 PyQt 作为更好的选择,这让我开始了我的 PyQt 之旅。

我注意到 PyQt 的第一件事是它的教程和指南的数量比它的竞争对手 Tkinter 的要少得多。事实上,其中一些教程实际上是针对过时的 PyQt4,而不是更新的 PyQt5 版本。这实际上是促使我开发自己的PyQt 教程系列的一个因素。

我在编码时的另一个经验是 PyQt5 比 Tkinter 更难调试。有时,如果我的代码中存在语法错误或错误,GUI 窗口会直接关闭而没有警告和错误消息。然而,随着我对库及其语法越来越熟悉,这确实不再是一个问题。

此外,PyQt5 应用程序的初始启动时间实际上比类似大小的 Tkinter 应用程序要长。尽管只存在一些小部件,但 PyQt5 有时会花费几乎两倍于其 Tkinter 等效项的时间来显示。

小部件

现在,进入实际的 PyQt 代码。我对它的第一印象是它与 Tkinter 相比要长得多。在 PyQt 中创建和自定义单个小部件可能会占用超过 5 行代码。而在 Tkinter 中,我最多需要 3 行。然而,在 PyQt 的辩护中,它的行更短,更容易理解(单独地),所以它有点平衡。

GUI 的区别非常明显。甚至在我创建任何小部件之前,查看 PyQt 显示窗口,我就可以说它非常出色。它看起来更干净、更清晰,不像 Tkinter 给了我这种模糊的外观。如果我必须用一个词来描述 PyQt 的窗口,那就是“时尚”。

PyQt5 也有更多数量的小部件。PyQt 和 Tkinter 的大多数小部件是相同的,但 PyQt 在“特殊小部件”类别中胜出。这些例子是QProgressBar , QSpinBox, QDial ,QDateEdit等等。

各种各样的

PyQt 有一个名为Qt 设计器的特殊(和流行)工具,它为您提供了一个 GUI 编辑器,您可以使用它来使用 Qt Widgets 创建自己的 GUI。它就像一个拖放编辑器,您无需编写代码,只需操作小部件及其在窗口中的位置即可。

小部件比较

下面是两个 GUI 库共有的三个小部件之间的比较。我选择了表现出最大差异的三个。

QLineEdit和之间的比较Entrybox

按钮比较(我认为最大的区别在这里)。

QComboBox和之间的比较ComboBox

通过像这样单独比较小部件可能有点难以区分。理想情况下,您应该尝试两者。到时候你就会真正了解其中的区别。

PyQt 的小部件更具交互性,例如当光标在按钮上方时按钮会发出蓝色光。您只能在实际使用 GUI 时告诉自己这样的事情,因此最好自己实际运行代码。正是这些微小的差异结合在一起,最终产生了巨大的差异。

代码比较

只是为了它,我们决定也进行代码比较。下面的代码将使用相同的小部件创建相同的 GUI。它的目的很简单。有一个介绍性标签,一个接受输入的输入字段,还有两个按钮,一个打印用户输入,另一个关闭应用程序。

这是一个相当简单的 GUI 应用程序,任何初学者都可以制作。即使您对这两个库一无所知,代码也应该很容易理解。

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

PyQt vs Tkinter – 更好的 GUI 库 的相关文章

  • 对于 `mouseMoveEvent()` 来说鼠标移动太快

    以下是 Python 3 版本 UI XML 代码显示 4QProgessBar对于每个鼠标方向 标记为 X X Y Y 快速移动鼠标 以圆圈形式 将使 4QProgessBar上升到 99 然后是一些QProgessBar休息一下 直到鼠
  • 错误:permission_manager_qt.cpp(82) 不支持的权限类型:13

    我正在开发具有内置浏览器功能的 python 代码 PyQt 5 13 import sys from PyQt5 QtCore import from PyQt5 QtGui import from PyQt5 QtWidgets imp
  • 在可编辑的QSqlQueryModel中实现setEditStrategy

    这是后续这个问题 https stackoverflow com questions 49752388 editable qtableview of complex sql query 在那里 我们创建了 QSqlQueryModel 的可
  • 默认窗口颜色 Tkinter 和十六进制颜色代码

    我想知道当您简单创建一个窗口时 Tkinter 中的默认窗口颜色 root Tk 如果有的话 可以将小部件设置为相同的颜色或使用十六进制颜色代码吗 使用RGB 我找到的 正常 窗口的颜色代码是 R 240 G 240 B 237 Thank
  • 在 Tkinter 中使用锚点

    我正在尝试对自动点唱机进行编程 但是我还处于早期阶段 并且在使用时遇到了问题anchor 这是我的代码 from tkinter import from tkinter import messagebox as box def main m
  • PyQt 中的线程和信号问题

    我在 PyQt 中的线程之间进行通信时遇到一些问题 我使用信号在两个线程 发送者和监听者 之间进行通信 发送者发送消息 期望被监听者接收 但是 没有收到任何消息 谁能建议可能出了什么问题 我确信这一定很简单 但我已经环顾了几个小时但没有发现
  • Python 应用程序崩溃并显示“PyEval_RestoreThread:必须在持有 GIL 的情况下调用该函数,但已释放 GIL”

    我有一个Python程序 因为它太大了 这里是它的源代码的链接 Link https github com zcg coder pyplussource 当我在 Mac 上运行它时 有时会遇到这个奇怪的异常 Fatal Python err
  • 如何使用 Tkinter 创建等宽网格列?

    如何强制 Tkinter 应用程序窗口中的列宽度相等 tkdocs网站声明如下 每列的宽度 或每行的高度 取决于列或行中包含的小部件的宽度或高度 这意味着当绘制用户界面并将其划分为行和列时 您无需担心每列或行的宽度相等 或高度 大概 TkD
  • 删除 tkinter 文本默认绑定

    我正在制作一个简单的 tkinter 文本编辑器 但我想要所有默认绑定文本小部件如果可能的话删除 例如当我按Ctrl i它默认插入一个制表符 我制作了一个事件绑定来打印文本框中有多少行 我将事件绑定设置为Ctrl i以及 当我运行它时 它会
  • 我可以同时打开两个 Tkinter Windows 吗?

    可以同时打开2个窗口吗 import tkinter as Tk import random import math root Tk Tk canvas Tk Canvas root background image Tk PhotoIma
  • QSortFilterProxyModel + QAbstractItemModel modelIndex.internalPointer() 导致崩溃

    我在 PyQt 4 8 Python 2 7 中实现了自己的 QAbstractItemModel class FriendListModel QtCore QAbstractItemModel def init self groups c
  • Python 3.x 中的 PIL ImageTk 等效项

    我正在使用 Tkinter 开发一个应用程序 它使用以下数据库png图标的图像文件 为了在应用程序中使用所述图像 我使用 PIL 打开它们Image open 运行它通过ImageTk PhotoImage函数 然后将其传递给小部件构造函数
  • 在 Tkinter 中调整另一个小部件内的一个小部件的大小

    我正在开发穆斯堡尔光谱 化学 的模拟软件 但在设计 UI 时 我在使用父窗口小部件调整子窗口小部件的大小时遇到 了问题 当窗口最大化时 父框架会填充额外的空间 但子窗口小部件不会更改其大小 from Tkinter import impor
  • 如何在pyqt5中创建小部件来显示谷歌地图

    如何从用户那里获取纬度和经度并在 pyqt5 小部件的地图上显示该位置 我的操作系统是Windows 我找到了这个链接 https github com eyllanesc qMap https github com eyllanesc q
  • 如何理解 lambda 中的闭包? [复制]

    这个问题在这里已经有答案了 我想循环制作 5 个按钮 并为每个按钮绑定一个命令来打印索引 在以下解决方案中 它始终打印相同的索引 我的代码是这样的 for i in range 5 make button Tkinter Button fr
  • 如何让小部件在上下文菜单出现时接收鼠标释放事件

    在Ubuntu20 04上 当上下文菜单出现时 我无法让小部件接收鼠标释放事件 而Windows可以接收 我的pyqt版本是5 15 2 我考虑过手动发送鼠标释放事件 但我不知道当上下文菜单出现时哪些系统会收到鼠标释放事件 这样做可能会导致
  • 为什么我无法在 OS X 上更改 tkMessagebox.askyesno() 上的图标?

    tkMessageBox askyesno Title Message icon tkMessageBox WARNING 在 OS X 上只给我火箭图标 我知道 OS X 和 tkMessageBox 图标有些奇怪 因为tkMessage
  • Python Tkinter,停止线程函数

    我目前正在为 3D 打印机开发 GUI 并且遇到如何停止线程函数的问题 我希望能够单击 GUI 中具有另一个功能的按钮 该按钮将阻止线程函数通过串行端口发送 G 代码字符串 目前 该函数已合并线程 以允许在打印期间触发其他函数 我非常感谢有
  • 使用 Matplotlib、PyQt 和 Threading 进行实时绘图导致 python 崩溃

    我一直在努力研究我的 Python 应用程序 但找不到任何答案 我有 PyQT GUI 应用程序 它使用 Matplotlib 小部件 GUI 启动一个新线程来处理 mpl 小部件的绘图 恐怕我现在通过从另一个线程访问 matplotlib
  • 如何更新 Tkinter Canvas 上的图像?

    我正在尝试制作一个脚本 该脚本将使我能够动态更新图像对象 然后将更新后的图像发布到 Tkinter Canvas 小部件 这里的代码是原型代码 只是为了了解基础知识 这里的目的是在画布显示的图像上的单击位置放置一个蓝色像素 这里发生了一些非

随机推荐

  • 蓝牙技术的基础知识

    1 无线电频谱 蓝牙技术使用2 4 GHz ISM频段 xff08 2400至2483 5 MHz xff09 xff0c ISM频段就是各国挪出某一段频段主要开放给工业 xff0c 科学和医学机构使用 应用这些频段无需许可证或费用 xff
  • Ubuntu下实现串口通信

    在ubuntu下使用cutecom可以接受串口消息也可以给串口发送消息 基本信息 xff1a 库 xff1a Python 的 serial 硬件 xff1a 电脑 Ubuntu18 04系统 USB Jeston AGX Xavier x
  • 4.FreeRTOS调度器的启动简易分析

    FreeRTOS调度器的启动简易分析 架构 xff1a Cortex M3版本 xff1a FreeRTOS V9 0 0前言 xff1a 上一篇我分析了关于一个任务的创建过程 xff0c 既然创建了任务 xff0c 自然是要用 那么Fre
  • ARM40-A5应用——与网络时间的同步1(概述)

    ARM40 A5应用 与网络时间的同步1 xff08 概述 xff09 2018 6 28 版权声明 xff1a 本文为博主原创文章 xff0c 允许转载 本文介绍ARM40 A5本地系统时间 硬件时间 时区 网络时间 ntpdate nt
  • 如何有效阅读《C++ Primer》那么厚的书

    我就是那种正面刚大部头的选手 xff0c 这些年读过的工作相关的 砖头 大概有 c 43 43 primer xff0c Windows核心编程 xff0c 算法导论 xff0c unix网络编程 xff0c STL源码剖析 等等吧 xff
  • 【Arduino 语法——结构体】

    Arduino 语法 结构体 1 0 项目结构 1 1 setup 1 2 loop 1 3 main 2 0 控制语句 2 1 break 2 2 continue 2 3 while 2 4 do while 2 5 for 2 6 i
  • 【MKS_GEN_L 主板使用说明书】

    MKS GEN L 主板使用说明书 1 描述2 特征3 主板封装3 1 尺寸图3 2 接线图3 2 1 MKS GEN L V1 0系统连接图3 2 2 MKSGEN L V2 1系统连接图 4 引脚排列5 GEN LV2 1驱动设置5 1
  • 【基于腾讯云的远程机械臂小车】

    基于腾讯云的远程机械臂小车 1 项目来源 1 1 项目概述 1 2 系统结构 1 3 设计原理 2 硬件搭建 2 1 CH32V307开发板 2 2 Arduino mega2560 2 3 富斯I6遥控器 2 4 机械臂小车 2 5 ES
  • 电脑之间快速传输超大文件(100GB以上)的方法

    引言 假如有这样一个场景 xff0c 你买了一台新的电脑 但是老电脑上存放着多年累积的数据 几百G之多 你要花时间把旧电脑上的数据导到新电脑上去 xff0c 这很费精力 于是你想有没有更快速的方法立马挪过去呢 xff1f 本文提供了五种方法
  • 《软件架构设计》(Yanlz Unity SteamVR 云技术 5G AI=VR云游戏=框架编程 架构设计 设计重构 游戏框架 框架入门 架构师 UML MVC ECS 立钻哥哥 ==)

    软件架构设计 软件架构设计 版本 作者 参与者 完成日期 备注 YanlzFramework 1910 V01 1 0 严立钻 2019 10 19 软件架构设计 发布说明 xff1a 43 43 43 43 软件架构设计 xff1a 是对
  • 进程的切换过程

    切换方式 进程的切换 xff0c 实质上就是被中断运行进程与待运行进程的上下文切换 从主观上来理解 只分为两步 xff1a 1 切换新的页表 xff0c 然后使用新的虚拟地址空间 2 切换内核栈 xff0c 加入新的内容 PCB控制块 xf
  • SLAM之camera(Intel RealSense D435)调试第一弹:Win10平台下getting started

    参见官方的getting started文档 https software intel com en us realsense d400 get started xff0c 这个quick start guide是Intel RealSen
  • Cmake的 debug和release

    Cmake的 debug版本和release版本 xff08 转 xff09 debug版本的项目生成的可执行文件需要有调试信息并且不需要进行优化 xff0c 而release版本的不需要调试信息但是需要优化 这些特性在gcc g 43 4
  • 【Kubernetes】K8s官方文档使用技巧

    学习K8s有很多技巧 其中一个技巧就是要多浏览官方 https kubernetes io zh 的说明文档 对于英语基础不是太好的 K8s官方还提供了中文版的页面 点击 文档 我们就进入了K8s文档的主页 主页上看起来也没多少知识点 别急
  • (六)定时器/计数器

    xff08 六 xff09 定时器 计数器 一 简介 定时器和计数器是两个名字 xff0c 但是原理上来说是一样的 xff0c 都是对脉冲进行计数 xff0c 区别在于时钟来源 xff0c 如果来自内部时钟信号 xff0c 由于内部时钟通常
  • Windows下令QProcess弹出CMD界面

    研究了快一下午 xff0c 来回看了QProcess文档中 xff0c 关于start execute statedDetached相关接口的调用说明 xff0c 然而并没有什么用处 差点就准备调用CreateProcess API的接口
  • Linux aarch64交叉编译之cJSON解析器

    对于cJSON项目的交叉编译 xff0c 该项目难度并不大 xff0c 灵活性也较强 该文章的目标是编译一套aarch64 Linux Debian嵌入式版本上可以运行的版本库 xff0c 基本无坑 老套路 xff0c 先把linux桌面版
  • Linux docker(03)可使用GPU渲染的x11docker实战总结

    该系列文章的目的旨在之前的章节基础上 xff0c 使用x11docker构建一个可以使用GPU的docker容器 该容器可以用于3D图形渲染 XR 等使用GPU渲染的程序调试和运行 0 why docker 为什么非要用x11docker
  • 北斗卫星导航系统介绍

    北斗卫星导航系统 导言 2020年3月9日 xff0c 我国在西昌卫星发射中心用长征三号乙运载火箭 xff0c 成功发射北斗系统第五十四颗导航卫星 距离北斗三号系统建成 xff0c 仅一步之遥 从双星导航定位到54颗北斗嵌满星空 xff0c
  • PyQt vs Tkinter – 更好的 GUI 库

    PyQt 和 Tkinter 的比较 在本文中 xff0c 我将分享我自己使用两个 GUI 库 PyQt 和 Tkinter 的旅程和个人经验 我还对具有相同小部件的 Tkinter 和 PyQt GUI 进行了并排比较 本文比较了两个 P