有什么优势转换界面的文件向Python码vs装载它直接? [重复]

0

的问题

是有一个优点:

转换到蟒蛇 pyside6-uic mainwindow.ui>ui_mainwindow.py 然后

import sys
from PySide6.QtWidgets import QApplication, QMainWindow
from PySide6.QtCore import QFile
from ui_mainwindow import Ui_MainWindow

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

if __name__ == "__main__":
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    sys.exit(app.exec())

对装载这直接就像这样?

ui_file = QFile("mainwindow.ui")
ui_file.open(QFile.ReadOnly)

loader = QUiLoader()
window = loader.load(ui_file)
window.show()

我想的程序将启动的速度运行得更快,如果转换。 是否有任何其他考虑?

pyqt pyside6 python qt
2021-11-22 11:50:08
1

最好的答案

0

有两个主要差异:

  • 在装载、QUiLoader理论上增加了一点的开销,因为它已经建立ui每次,这意味着它具有分析XML文件,建立节点的结构,然后创建的用户界面与所有其内容;伊斯兰法院联盟的文件,而不是直接将创建UI,跳过一两个步骤;
  • QUiLoader只能建立一个 新的 部件基于UI文件,而伊斯兰法院联盟的方法允许使用一个已经存在的 基础的部件,孩子部件可以加入;

后一点可能是最重要:采用QUiLoader你不能直接使用的子类对所装载的用户界面。

例如,如果创建一个主窗口在设计师,QUiLoader会返回一个 新的 QMainWindow. 你不能(或者,至少,你应该不)做到以下几点:

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        ui_file = QFile("mainwindow.ui")
        ui_file.open(QFile.ReadOnly)

        loader = QUiLoader()
        window = loader.load(ui_file, self)

你甚至不应该试图使返回的对象为中心部件,如下所示:

        self.setCentralWidget(window)

因为结果将有一个QMainWindow 一QMainWindow,这是鼓励和支持,并且还可能创造的问题时使用的标准特征的一个QMainWindow(通常、码头和工具栏).

唯一的选择就是创建一种基本形式在设计和使用,作为中央部件,与下,菜单、码头和工具栏必须创建的代码。

为PySide,唯一的可能性,即允许完全的继承是使用pyside-伊斯兰法院联盟的方法和最后使用多种继承权(但是,这不是一个要求,因为组成一个有效的替代无论如何):

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)

另一方面,PyQt提供的 loadUi 功能,实际上做什么 setupUi 的确,由于第二个论点是没有父母的小部件,但小组件本身的内容的用户界面将被载

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        uic.loadUi("mainwindow.ui", self)

据我所知,PySide没有提供任何类似的东西呢。

注意载ui在运行时具有两个问题无论如何,对这两种绑定:

  • 没有事先检查的理智,如果UI文件已损坏,或者无效的,或者具有不支持的特性/性质,由于版本的不匹配,它可能会不适当或甚至崩溃;
  • 当使用IDE,有没有代码的完成ui对象,因为他们只是在运行时加载;

这些都不是主要问题,但重要的是要意识到他们无论如何。

2021-11-22 14:09:05

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................