前言
通過Qt Designer(PyQt6與PySide6對應(yīng)的Designer設(shè)計(jì)的界面生成的UI文件有區(qū)別)設(shè)計(jì)的界面會生成對應(yīng)的UI文件,一般會使用PyUIC工具將UI文件轉(zhuǎn)換為對應(yīng)的Py文件來使用,后面每次界面發(fā)生更新時都要重新轉(zhuǎn)換一次,比較麻煩;另外,如果直接在UI文件中添加自己的代碼,如信號與槽等動作的設(shè)計(jì),當(dāng)UI有更新時都會覆蓋自己添加的代碼,顯然不合理,目前發(fā)現(xiàn)有兩種方式可以避免上面的問題,第一種,繼承UI文件中的類,自己的代碼添加在繼承類中;第二種,在自己的類中加載UI文件,不需要轉(zhuǎn)換UI文件。兩種方式各有利弊,下面詳細(xì)看一下設(shè)計(jì)過程,首先簡單定義一下生成的UI設(shè)計(jì)文件,設(shè)計(jì)的UI文件為main.ui,轉(zhuǎn)換以后的Python文件為main.py,如下所示:
# -*- coding: utf-8 -*-
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
QMetaObject, QObject, QPoint, QRect,
QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QFont, QFontDatabase, QGradient, QIcon,
QImage, QKeySequence, QLinearGradient, QPainter,
QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QPushButton, QSizePolicy, QWidget)
class Ui_widget(object):
def setupUi(self, widget):
if not widget.objectName():
widget.setObjectName(u"widget")
widget.resize(640, 480)
self.btn = QPushButton(widget)
self.btn.setObjectName(u"btn")
self.btn.setGeometry(QRect(0, 0, 75, 24))
self.retranslateUi(widget)
QMetaObject.connectSlotsByName(widget)
# setupUi
def retranslateUi(self, widget):
widget.setWindowTitle(QCoreApplication.translate("widget", u"Form", None))
self.btn.setText(QCoreApplication.translate("widget", u"Btn", None))
# retranslateUi
類繼承方式
import sys
from PySide6.QtGui import QIcon
from PySide6.QtWidgets import QApplication, QMainWindow
from main import Ui_widget
class Main(Ui_widget):
def __init__(self, widget):
super().setupUi(widget)
if __name__ == "__main__":
app = QApplication(sys.argv)
app.setWindowIcon(QIcon("icon.ico"))
widget = QMainWindow()
window = Main(widget)
widget.show()
sys.exit(app.exec())
上面繼承類中的super().setupUI(widget)是關(guān)鍵,通過調(diào)用父類的窗口初始化函數(shù),把父類中的組件繼承到當(dāng)前類文章來源:http://www.zghlxwxcb.cn/news/detail-510299.html
加載UI文件的方式
import sys
from PySide6.QtCore import QObject, QFile
from PySide6.QtUiTools import QUiLoader
from PySide6.QtGui import QIcon
from PySide6.QtWidgets import QApplication
class Main(QObject):
def __init__(self):
QObject.__init__(self)
# 加載UI文件
qfile = QFile('main.ui')
qfile.open(QFile.ReadOnly)
qfile.close()
self.ui = QUiLoader().load(qfile)
# 調(diào)用界面類中的組件
self.ui.btn.setText('New name')
if __name__ == "__main__":
app = QApplication(sys.argv)
app.setWindowIcon(QIcon("icon.ico"))
window = Main()
window.ui.show()
sys.exit(app.exec())
總結(jié)
兩種方式都實(shí)現(xiàn)了界面文件和自己代碼的整合,但是有以下幾點(diǎn)區(qū)別,個人更偏向于類繼承的方式,從代碼設(shè)計(jì)的邏輯性來說更合理。
1、類繼承方式當(dāng)界面發(fā)生變化時需要重新轉(zhuǎn)換生成對應(yīng)的Python文件,加載UI文件的方式不需要轉(zhuǎn)換即可使用;
2、易用性方面,類繼承方面因?yàn)槭抢^承,在IDE中可以對設(shè)計(jì)文件中的組件進(jìn)行代碼提示,加載UI文件的方式因?yàn)槭前呀缑骖惓跏蓟闪俗杂蓄惖囊粋€屬性對象,調(diào)用界面類中組件時不會有提示,且調(diào)用方式跟繼承類方式相比會有區(qū)別。文章來源地址http://www.zghlxwxcb.cn/news/detail-510299.html
到了這里,關(guān)于PySide6:Qt Designer UI文件的兩種使用方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!