QML与Qt Designer以及纯代码,哪一个更适合(PyQt上下文)?

5
我是一名热爱Python的程序员,想要开发一个严肃的GUI桌面应用程序。Qt似乎是最好的选择,因此我已经开始学习它,并发现有三种构建界面的选项:
  • QML
  • Qt Designer
  • 纯代码(仅限Python/C++)
现在我正在尝试弄清楚这三种方法的能力差异。我是否可以在所有三种方法中拥有相同的控制权?它们各有什么优缺点?
此外,无论如何我都能够有多少控制权?我能否像Spotify界面那样将几乎所有内容都定制为独特的自定义小部件?还是我只能使用通用的预设外观?

嗨!我邀请您阅读几天前开放的这个线程:https://dev59.com/44Lba4cB1Zd3GeqPhafe - Martin
4个回答

6

我通常使用Qt Designer来制作用户界面。它提供了相当多的选项,可以让你大致了解你的UI将会是什么样子。

然而,与其将.ui文件编译成.py文件(你可以对其进行子类化),我更喜欢在运行时动态加载ui,使用PyQt4.uic或者PySide.QtUiTools。使用这些工具,你可以调用一个函数,传递给它ui文件的路径,它会返回一个顶层窗口/小部件的对象(为了下面的例子,我们假设这个对象被放置在my_ui中)。这个对象有所有其他ui元素的属性,你可以通过my_ui.my_object_name来访问其中的任何一个,其中my_object_name是你在Qt Designer中给该ui元素命名的名称。

使用这种方法意味着你:

  • 不必将ui文件编译为py文件
  • 仍然可以使用Python接口访问UI中的所有小部件,使你能够像使用纯代码创建它们一样配置小部件
Qt Designer还具有指定小部件升级的功能,因此您可以将基本的QLabel(例如)插入到ui中,但在加载它时,它可以自动升级为您制作和指定的QLabel子类。因此,您可以在Qt Designer中设计UI的大致形状,但可以轻松地在运行时将大多数组件升级为自定义小部件。
由于PySide和PyQt对.ui文件加载器的不同接口,我将它们包装成我维护的库(qtutils)的一部分,以便它们具有在运行时加载ui文件和指定小部件升级的公共接口。
我也没有使用QML的经验,但根据我所听到的,它还没有使用QWidgets强大。然而,我认为编写/开发Qt库的人正在推动QML作为未来的方式。
因此,我的建议是使用Qt Designer而不是纯代码,但值得检查QML,以防它对您想要的内容足够。

3
我已经使用PyQt有一段时间了(4+年),我喜欢为简单的应用程序编写UI;但是对于其他情况,我会使用Qt Designer。使用PyQt,您可以将设计师生成的.ui文件转换为.py文件,因此,如果某些内容不完全符合您的要求,您始终可以在代码中覆盖它(例如覆盖QWidgets等)。
至于编写美观UI的应用程序...嗯,Qt确实支持CSS进行样式设置,尽管我不确定其支持程度有多广泛。 QML是新生代,虽然我还没有使用过,但我看了一些示例,所有应用程序都非常漂亮且编写起来相当简单-如您所知,它具有JavaScript风格的语法,而我相信Spotify是用JS编写的(虽然我可能完全错了)。
例如,如果您是Windows开发人员,“常规”Qt与QML之间的区别就有点像Windows Forms和XAML / Windows Store应用程序(适用于Windows 8)。
简而言之:是的,您可以大大自定义Qt应用程序的外观和感觉,但我不确定与QML相比,这是否容易。

3

根据我的经验,在掌握了布局之后,纯代码是最好的选择。没有子类、多重继承、项目中的额外文件等烦恼。而且你可以轻松地创建辅助器/专门的类来使构建GUI变得非常简单。事实上,我认为这是一种常见的方式——使用Qt Designer来缓解学习曲线,然后切换到纯代码。以上仅代表个人意见,因人而异。


1

我并不是PyQt的专家,但我有相当多的QWidgets和Qml编程经验。我会选择Qml,因为它简单易用,编写GUI非常方便。此外,您可以完全控制GUI。使用QML,您几乎可以做任何事情。 QML最好的一点是,您可以为任何屏幕分辨率构建任何应用程序。这意味着,如果您将其设计为一个屏幕,则可以确保该应用程序在任何屏幕上运行而无需修改qml代码,这要归功于其父子属性依赖关系。另一个最好的事情是,一旦您为Windows等一个平台构建了应用程序,您就可以将其构建为Linux、Android、MacOS、iOS等任何平台,几乎不需要更改代码。


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