PyQt6和PySide6这两个库在加载区别在于它们对加载从Qt Creator/Designer导出的.ui
文件的处理。PyQt6提供了uic
子模块,可以用来直接加载UI文件,以产生一个对象。这感觉很像Pythonic(如果你忽略了camelCase)。
PyQt6:
import sys
from PyQt6 import QtWidgets, uic
app = QtWidgets.QApplication(sys.argv)
window = uic.loadUi("mainwindow.ui")
window.show()
app.exec()
PySide6:
import sys
from PySide6 import QtCore, QtGui, QtWidgets
from PySide6.QtUiTools import QUiLoader
loader = QUiLoader()
app = QtWidgets.QApplication(sys.argv)
window = loader.load("mainwindow.ui", None)
window.show()
app.exec_()
要在PyQt6中加载一个UI到一个现有的对象上,例如在你的QMainWindow.__init__
,你可以调用uic.loadUI
,将self
(现有的widget)作为第二个参数。
import sys
from PyQt6 import QtCore, QtGui, QtWidgets
from PyQt6 import uic
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
uic.loadUi("mainwindow.ui", self)
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
PySide6加载器不支持这个--.load
的第二个参数是你正在创建的widget的父widget。这阻止了你向widget的__init__
块添加自定义代码,但你可以通过一个单独的函数来解决这个问题。
import sys
from PySide6 import QtWidgets
from PySide6.QtUiTools import QUiLoader
loader = QUiLoader()
def mainwindow_setup(w):
w.setWindowTitle("MainWindow Title")
app = QtWidgets.QApplication(sys.argv)
window = loader.load("mainwindow.ui", None)
mainwindow_setup(window)
window.show()
app.exec()
转载至:PyQt6 vs PySide6 - 这两个Python Qt库之间有什么区别? - 掘金 (juejin.cn)