本文比较了两个 Python GUI 库PyQt与Tkinter。
自从我加入了几个 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 。
第一印象
随着我的编程知识和外展能力的增长,我开始听说其他 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 应用程序,任何初学者都可以制作。即使您对这两个库一无所知,代码也应该很容易理解。