python 为什么在pyqt5中我应该使用pyuic5而不是uic.loadUi(“my.ui”)?

uemypmqf  于 2023-02-15  发布在  Python
关注(0)|答案(3)|浏览(185)

我一直在使用pyqt5进行QT5 for Python的实验,我注意到大多数教程建议使用pyuic5将XML UI转换为Python代码,我还看到过一些教程使用**uic.loadUi(“myui.ui”)**来动态加载XML UI。对我来说,这似乎是一个更干净,更模块化的解决方案,但这似乎是一个不受欢迎的选择。有没有理由用pyuic5转换代码是一个更好的解决方案?

h9a6wy2h

h9a6wy2h1#

这两种解决方案都很好,它们都有优缺点,必须与您想做的事情权衡,而且很多时候这将取决于程序员的品味。

脓毒性5:

  • 允许继承**[+]**
  • 运行应用程序时没有额外的负载**[+]**
  • 每次修改文件时将.ui转换为.py**[-]**

uic.加载Ui():

  • 修改.ui**[+]**时,您不必修改任何内容
  • 编译额外时间**[-]**
  • 不允许继承(可以使用uic.loadUiType()实现继承)[-]
  • 不允许使用inspect[-]
nzk0hqpo

nzk0hqpo2#

使用pyuic5的最大原因是IDE(例如Visual Studio Code、PyCharm)不理解.ui文件,因此无法为类提供代码内省(例如小部件名称的自动完成),除非将其编译为Python。

6rqinv9w

6rqinv9w3#

在深入研究了这一点之后,对我来说,动态加载QT Designer生成的表单是一种可行的方法,您可以使用以下命令来解决无法访问底层小部件的问题(假设您的表单中有一个名为bob_label的标签):

self.bob_label: QLabel = self.findChild(QtWidgets.QLabel, 'bob_label')

在PyCharm中,无论如何,这将自动启用Intellisense(因此IDE现在知道窗口类中有一个名为bob_label的标签)。在Visual Studio代码中,尽管我付出了很大的努力,但我还是找不到一种方法来轻松地使其工作,尽管我最终还是管理了它。

相关问题