PySide2 QUiLoader返回一个空窗口

时间:2018-05-02 06:22:43

标签: python pyqt pyqt5 pyside2

PySide2(5.6.0~a1)Qt UI文件加载器返回一个空窗口,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

2 个答案:

答案 0 :(得分:2)

在PySide2中,QMainWindow类没有覆盖自身的功能。必须显示用户界面:

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_())

答案 1 :(得分:1)

QUiLoader().load()将小部件作为对象返回,因此如果您将其分配给变量,它将不会执行任何操作,您应该使用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_())