tem*_*ame 5 qt pyqt qt-designer
我是一个狂热的pythonista,想要构建我的第一个严肃的GUI桌面应用程序,它似乎Qt是最好的选择,所以我开始学习它,我发现似乎有三个选项,你可以如何构建你的界面:
现在我想弄清楚这三种方法的能力是否存在差异.我对三者都有同等程度的控制吗?优缺点都有什么?
而且,我还有多少控制权?我可以自定义UI,如Spotify界面,几乎所有东西都是一个独特的自定义小部件吗?或者我是否坚持使用或多或少的通用开箱即用?
我通常使用Qt Designer来生成UI。有很多选项可用,它使您大致了解UI的外观。
但是,与其将.ui文件编译成.py文件(可以子类化),我更喜欢在运行时使用PyQt4.uic或来动态加载ui PySide.QtUiTools。使用这些函数,您可以调用一个函数,并将其传递到ui文件的路径,并且它将为顶级窗口小部件/窗口返回一个对象(在下一个示例中,我们将其放置在中my_ui)。这个对象有您可以通过访问所有其他UI元素属性my_ui.my_object_name那里my_object_name是你给了在Qt Designer中的UI元素的名称。
使用这种方法意味着:
Qt Designer还具有指定小部件升级的功能,因此您可以QLabel在用户界面中插入基本的(例如),但是在加载时,它可以自动升级到QLabel您已经创建并指定的子类。因此,您可以在Qt Designer中设计UI的粗略形状,但可以在运行时轻松地将大多数组件提升为自定义小部件。
由于PySide和PyQt中.ui文件加载器的接口不同,因此将它们包装为我维护的库(qtutils)的一部分,以便它们具有一个公共接口,用于在运行时加载ui文件并指定小部件升级。
我也没有使用QML的经验,但是根据我所听说的,它还没有使用QWidgets强大。但是我认为编写/开发Qt库的人们正在将QML推向未来。
因此,我的建议是使用Qt Designer而不是纯代码,但是如果QML足以满足您的要求,则值得检查一下QML。
我使用 PyQt 已经有一段时间了(4 年多),我更喜欢为简单的应用程序编写 UI 代码;但除此之外,我使用 Qt Designer。使用 PyQt,您可以将设计器生成的 .ui 文件转换为 .py 文件,因此如果某些内容不完全符合您的喜好,您可以随时在代码中覆盖它(例如覆盖 QWidgets 等)。
至于编写具有漂亮 UI 的应用程序……好吧,Qt 确实采用 CSS 进行样式设置,尽管我不确定它的支持有多广泛。QML 是这个领域的新人,虽然我还没有研究过它,但我查看了一些示例,所有应用程序看起来都很华丽并且编写起来相当简单 - 正如您可能知道的那样,它具有 JavaScript 风格的语法,并且我相信 Spotify 是用 JS 编写的(尽管我可能完全错了)。
例如,如果您是一名 Windows 开发人员,我对“常规”Qt 与 QML 的看法有点像 Windows 8 的 Windows 窗体和 XAML/Windows 应用商店应用程序。
简而言之:是的,您可以极大地定制 Qt 应用程序的“外观和感觉”,但我不确定这与 QML 等相比有多容易。