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