PySide2 QUiLoader returns 和空 window

PySide2 QUiLoader returns an empty window

PySide2(5.6.0~a1) Qt UI 文件加载器 returns 一个空的 window PyQt5 加载器工作正常。你能向我解释一下我错在哪里吗?

非工作 PySide2 版本:

import sys
from PySide2.QtWidgets import QDialog, QApplication
from PySide2 import QtUiTools

class AppWindow(QDialog):
    def __init__(self):
        super().__init__()
        self.ui = QtUiTools.QUiLoader().load("dialog1.ui")
        self.show()

app = QApplication(sys.argv)
w = AppWindow()
sys.exit(app.exec_())

工作 PyQt5 版本:

import sys
from PyQt5.QtWidgets import QDialog, QApplication
from PyQt5 import uic

class AppWindow(QDialog):
    def __init__(self):
        super().__init__()
        self.ui = uic.loadUi("dialog1.ui", self)
        self.show()

app = QApplication(sys.argv)
w = AppWindow()
sys.exit(app.exec_())

使用这个功能也不行:

def loadUiWidget(uifilename, parent=None):
    loader = QtUiTools.QUiLoader()
    uifile = QtCore.QFile(uifilename)
    uifile.open(QtCore.QFile.ReadOnly)
    ui = loader.load(uifile, parent)
    uifile.close()
    return ui

QUiLoader().load() returns 小部件作为一个对象,所以如果你将它分配给一个变量,它不会做任何事情,你应该使用 show():

import sys
from PySide2.QtWidgets import QApplication
from PySide2 import QtUiTools

app = QApplication(sys.argv)
w = QtUiTools.QUiLoader().load("dialog1.ui")
w.show()
sys.exit(app.exec_())

在 PySide2 中没有 QMainWindow class 覆盖自身的函数。有必要显示 ui:

import sys
from PySide2.QtWidgets import QDialog, QApplication
from PySide2 import QtUiTools

class AppWindow(QDialog):
    def __init__(self):
        super().__init__()
        self.ui = QtUiTools.QUiLoader().load("dialog1.ui")
        self.ui.show()

app = QApplication(sys.argv)
w = AppWindow()
sys.exit(app.exec_())

如果您想从设计器 *.ui 文件加载 QMainWindow,您可以使用

import sys
from PySide2.QtWidgets import QApplication, QMainWindow
from PySide2.QtUiTools import QUiLoader

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setCentralWidget(QUiLoader().load("form.ui"))

但是在 *.ui 文件中的设计器中设置的插槽信号绑定无论如何都不起作用

因此,对于设计器 GUI 和插槽信号绑定的全功能使用,我发现的唯一方法是将 *.ui 文件编译为 python 模块pyside UI 编译器:

pyside2-uic mainwindow.ui > ui_mainwindow.py

然后包含生成的 ui_mainwindow。在这种方法中,来自 Qt UI 设计器的槽信号对将工作良好。

import sys
from PySide2.QtWidgets import QApplication, QMainWindow
from ui_mainwindow import Ui_MainWindow

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