PySide2 QUiLoader 返回一个空窗口

u2g*_*les 2 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_())
Run Code Online (Sandbox Code Playgroud)

工作 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_())
Run Code Online (Sandbox Code Playgroud)

使用此功能也不起作用:

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
Run Code Online (Sandbox Code Playgroud)

eyl*_*esc 5

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_())
Run Code Online (Sandbox Code Playgroud)

  • ....它有效,但我丢失了在 Qt Designer 中所做的信号/插槽配置,这不是什么大问题。您是否知道一种方法可以达到与 PyQt5 中相同的结果,即 Qt Designer 中创建的所有小部件都是 Mydialog 类的实例变量? (2认同)

小智 5

在 PySide2 中, QMainWindow 类没有覆盖自身的功能。有必要显示 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_())
Run Code Online (Sandbox Code Playgroud)