前言
通过Qt Designer(PyQt6与PySide6对应的Designer设计的界面生成的UI文件有区别)设计的界面会生成对应的UI文件,一般会使用PyUIC工具将UI文件转换为对应的Py文件来使用,后面每次界面发生更新时都要重新转换一次,比较麻烦;另外,如果直接在UI文件中添加自己的代码,如信号与槽等动作的设计,当UI有更新时都会覆盖自己添加的代码,显然不合理,目前发现有两种方式可以避免上面的问题,第一种,继承UI文件中的类,自己的代码添加在继承类中;第二种,在自己的类中加载UI文件,不需要转换UI文件。两种方式各有利弊,下面详细看一下设计过程,首先简单定义一下生成的UI设计文件,设计的UI文件为main.ui,转换以后的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)是关键,通过调用父类的窗口初始化函数,把父类中的组件继承到当前类文章来源:https://www.toymoban.com/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)
# 调用界面类中的组件
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())
总结
两种方式都实现了界面文件和自己代码的整合,但是有以下几点区别,个人更偏向于类继承的方式,从代码设计的逻辑性来说更合理。
1、类继承方式当界面发生变化时需要重新转换生成对应的Python文件,加载UI文件的方式不需要转换即可使用;
2、易用性方面,类继承方面因为是继承,在IDE中可以对设计文件中的组件进行代码提示,加载UI文件的方式因为是把界面类初始化成了自有类的一个属性对象,调用界面类中组件时不会有提示,且调用方式跟继承类方式相比会有区别。文章来源地址https://www.toymoban.com/news/detail-510299.html
到了这里,关于PySide6:Qt Designer UI文件的两种使用方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!