PyQt和PyGTK相比有哪些优势?反之呢?

12

我有一个应用程序,需要重新设计其GUI以提高人机交互性。它是用PyGTK编写的,现在我想知道是否应该转换到PyQt以便于将来的开发。

这个应用程序具有大多数传统UI的元素:按钮、工具栏、对话框等,但也有一些特殊的要求:我肯定需要创建一个基于treeview/tableview的自定义小部件(类似于电子表格的小部件),而且这个应用程序有很多worker线程会更新GUI。

我在以下两个方面寻求建议:

  • 关于创建自定义小部件,PyQt是否提供比PyGTK更好的机制,特别是对现有小部件进行轻微修改?
  • 当使用PyGTK时,我遇到了使用threads_init()和threads_enter()正确情况下worker线程更新GUI的问题。在这一点上,PyQt是否更好?

2
首先,PyGTK已经不再得到积极开发。现在使用PyGObject似乎是正确的选择。 - Henry Gomersall
工作线程的更新总是使用gobject.idle_addthreads_init在Windows上不受支持,这可能是问题的原因? - schlamar
5个回答

3

我最喜欢GTK+,因为(至少对我来说)它看起来更好看。然而,PyQt和其变体(例如PySide)确实具有极其丰富的附加功能,包括WebKit引擎、XML解析器、SQL支持等等。

如果你只关心外观,我会推荐GTK+/PyGObject。如果你计划使用任何PyQt的功能,则应使用PyQt。

顺便提一下,如果你坚持使用GTK+,我建议你升级到PyGObject和GTK+ 3.0,因为PyGtk+已经不再维护。


1

我无法进行比较,因为我不使用GTK,但我会建议Qt。

Qt绝对有你所说的“treeview / tableview”,你可以将“cells”定制成自定义小部件(我正在研究这个主题)。Qt在线程方面考虑得非常周到,因此工作线程可以轻松使用信号/槽机制。是的,您可以通过应用样式表或子类化来修改现有小部件。

现在对于PyQt,由于许可问题,我不建议使用它。对我来说,PySide似乎是更好的Qt→Python绑定:它可以在商业应用程序中免费使用,并且在API方面有一些微小的优势(但否则它与PyQt完全兼容)。

Qt是跨平台的,使用cx_Freeze非常容易部署PySide应用程序;你的应用程序用户根本不需要安装任何东西。


2
只是为了与众不同,我会推荐PyQt而不是Pyside,因为在我的经验中,Pyside是一个比较新的项目,并且还有一些小bug。然而,这两个库的API几乎完全相同,所以如果你改变主意,切换它们也不应该太费劲。 - Luke
1
@Luke 我总是首先尝试import PySide,在出现ImportError时则尝试import PyQt4(不确定许可证后果会是什么),并且使用一个代码库使我的应用程序能够在Python 3和Python 2上运行。 - Oleh Prypin
1
如果您不需要LGPL,我建议使用PyQt而不是PySide。 PyQt是一个更成熟的项目,并且有一个非常能干和积极主动的维护者。 我也发现PySide存在显着的错误,尽管我承认最近没有经常使用它,所以在这方面可能会有所改变。 - ekhumoro
PyQT和PyGTK的主要区别在于,PyQT是一个库中包含了所有制作图形应用所需的内容,而PyGTK则需要找出每个组件对应的库的版本,如果需要额外功能,则会变得繁琐。 - amirouche

1
我从未使用过PyGTK,但我认为Qt的两个特点异常出色:model/view编程和signal/slots。如果您需要这种东西,我会建议至少阅读有关它们的文档,并比较这两个工具包。
设计师还可以节省很多时间。提升功能——您可以在设计师中使用自定义小部件将其视觉上替换为类似的内容,例如,您已经使用函数实现了自定义树形视图——非常方便。您可以使用设计师来显示常规树形视图,但在导出时使用您的自定义类。 文档非常好。

编辑:您可以直接使用Qt文档。我一直在使用PySide编写Python程序,只有少数情况下我实际上需要特定的文档。尽管它存在


1

我对GTK也没有经验,但仍然可以提供一些答案:

  • Qt从底层开始就被设计成面向对象的;它几乎所有的东西都支持子类化。PyQt同样如此。

  • Qt明确不支持除主GUI线程以外的任何线程修改GUI。这样做可能会导致崩溃。正如BlaXpirit所提到的,有各种非常容易的线程间通信机制,例如信号传递。


1
绝对是PyQt...有很多高级应用程序使用它...就我个人而言,我正在使用KDE,所以,即使我的系统GUI也使用Qt!我还在创建一个电子表格应用程序,我发现它比我最初想象的要容易得多...但是,BiaXpirit也是正确的:除非你正在开发一个开源应用程序,否则你可能应该使用PySide或其他东西...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接