의 장점은 무엇입으로 변환한 ui 파일을 Python code vs 로드 그것은 직접? [중복]

0

질문

이 있는 이점:

로 변환하 python 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 를 만들과 함께 모든 내용;uic 파일 대신 직접 만들어 UI 를 건너뛰는 처음 두 단계를 위;
  • QUiLoader 을 만들 수 있습니다 새로운 위젯을 기반으로 UI,파일 동안 uic 방법을 사용할 수 있습 기존의 기본 위젯,그리고 아이 위젯을 추가할 수 있습;

후자의 지점은 아마도 가장 중요한:사용 QUiLoader 직접 사용할 수는 없습니다 하위 클래스를 로드 UI.

예를 들어,만약 당신이 작성한 주요 창에서는 디자이너,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(일반적으로,부두 및 도구 모음).

유일한 대안 것 기본적인 형태를 만드는 위젯에서 디자이너와 사용하는 중심으로 위젯,단점으로는 메뉴,부두 및 도구 모음에 만들 수 있는 의 코드입니다.

에 대한 방법만 가능성할 수 있는 서브 클래스는 사용하는 방법-uic 방법과 그 후에 결국 사용하여 여러 상속(그러나 그것을 요구하지 않습으로 구성된 유효한 대체 어쨌든):

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

다른 한편으로,PyQt 제공 loadUi 는 기능을 실제로는 무엇인 setupUi 가,이후 두 번째 인수하지 않은 부모에 위젯지만,위젯,그 자체와의 내용을 ui 로드됩니다 으로 그것:

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

로,방법을 제공하지 않 유사한 아무것도 아직입니다.

참고로드 ui 런타임 시에는 두 가지 문제는 어쨌든,그리고 모두에 대한 바인딩:

  • 이 없기 전에 정신을 확인하는 경우,UI 파일이 손상되거나 유효하지 않거나 지원하지 않는 특성으로 인해 버전의 불일치,그것이 제대로 로드되지 않을 수 있습 또는 심지어 사;
  • 때 IDE 를 사용하고,없 코드를 완성한 ui 개체들이 있기 때문만이 로드에서 런타임;

사용자는 이러한 중요한 문제이지만,그것이 알고 있어야 하는 것이 중요 어쨌든 그들을.

2021-11-22 14:09:05

다른 언어로

이 페이지는 다른 언어로되어 있습니다

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