두 가지 주요 차이점이 있습니다:
- 의 측면에서 로드,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 개체들이 있기 때문만이 로드에서 런타임;
사용자는 이러한 중요한 문제이지만,그것이 알고 있어야 하는 것이 중요 어쨌든 그들을.