简体   繁体   English

PySide2 QUiLoader 返回一个空窗口

[英]PySide2 QUiLoader returns an empty window

PySide2(5.6.0~a1) Qt UI file loader returns an empty window whereare PyQt5 loader works fine. PySide2(5.6.0~a1) Qt UI 文件加载器返回一个空窗口,而 PyQt5 加载器工作正常。 Could you explained to me where I am wrong.你能向我解释我哪里错了。

Non Working PySide2 version:非工作 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_())

Working PyQt5 version:工作 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_())

Using this function also does not work :使用此功能也不起作用:

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

In PySide2 there's no function to QMainWindow class overwrite itself.在 PySide2 中, QMainWindow 类没有覆盖自身的功能。 It's necessary to show the ui:有必要显示 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_())

QUiLoader().load() returns the widget as an object so if you assign it to a variable it will not do anything, you should use show() : 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_())

If you want to load QMainWindow from designer *.ui file you can use如果你想从设计器*.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"))

but slot-signal bindings, which are set in the designer in *.ui file, are not working anyway .但是插槽信号绑定(在*.ui文件中的设计器中设置)无论如何都不起作用

So, for full-function use of designer GUI and slot-signal bindings, the only way I found is因此,对于设计器 GUI 和插槽信号绑定的全功能使用,我发现的唯一方法是

pyside2-uic mainwindow.ui > ui_mainwindow.py

then然后

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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM