4

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
4

3 回答 3

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_())
于 2020-08-07T11:18:10.303 回答
3

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_())
于 2018-05-02T06:49:41.047 回答
1

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

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 和插槽信号绑定的全功能使用,我发现的唯一方法是使用 pyside UI 编译器将 *.ui 文件编译为 python 模块:

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)
于 2021-12-06T16:42:37.937 回答