1、打开PySide6的UI设计工具pyside6-designer,设计一个主窗口,保存文件名为testwindow.ui
2、使用PySide6的RCC工具把testwindow.ui文件转换为testwindow_rc.py文件,此文件中有一个类Ui_MainWindow(包含各种控件对象)
一、通过类继承实现:
# 导入标准库sys
import sys
# 导入PySide6库中的两个类:QApplication, QMainWindow
from PySide6.QtWidgets import QApplication, QMainWindow
# 导入使用PySide6-Rcc工具转换的UI设计窗口Ui_MainWindow类
from testwindow_rc import Ui_MainWindow
# 应用程序
class TestMainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super(TestMainWindow, self).__init__()
self.setupUi(self)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = TestMainWindow()
win.show()
sys.exit(app.exec())
class TestMainWindow(QMainWindow, Ui_MainWindow): 定义了一个新的类TestMainWindow,它继承自 QMainWindow(PySide6.QtWidget中的QtMainWindow类) 和 Ui_MainWindow。
在这种多重继承的情况下,QMainWindow 是 PySide6中提供的一个主窗口类,它包含了很多创建和管理主窗口的功能。而 Ui_MainWindow 是由 PySide6 Designer 生成的一个界面类,它包含了在设计器中设计的窗口界面及其上的所有元素和布局。
TestMainWindow 类通过继承这两个类,同时获得 QMainWindow 的窗口管理功能和 Ui_MainWindow 的界面元素。
调用执行self.setupUi(self) :其实是调用Ui_MainWindow中的setupUi()方法,传入实参self是TestMainWindow类的实例对象,从而实现设计的窗口界面及其上元素(控件)的初始化完成布局。
通过上面的分离,以后修改Ui文件进行界面元素添加和修改属性等,然后转化Ui文件,将不影响逻辑代码。
另外,定义和设计方法来控制窗口及其上控件的行为,响应用户的操作等。要在TestMainWindow类的 __init__(self) 及其它方法中完成,这样不会因为修改ui文件及转化而被覆盖。
super(TestMainWindow, self).__init__(),是 Python 中用于调用父类构造方法的一种写法。在这里,TestMainWindow 是子类,而 self 是子类的实例。super() 函数是用来临时改变当前类的父类,并返回一个父类的实例。因此,super(TestMainWindow, self) 返回的就是 TestMainWindow 的父类的一个实例,然后调用其 __init__() 方法,即初始化方法。
这样做的目的是在子类的 __init__() 方法中,首先执行父类的 __init__() 方法,以便能够继承父类的属性和方法。这是一种常见的在面向对象编程中实现继承的方式。
在 Python 3 中,可以直接在子类中使用 super().__init__(),Python 会自动解析当前类和 self,不需要显式地传入。
二、关联界面类来实现
# 导入标准库sys
import sys
# 导入PySide6库中的两个类:QApplication, QMainWindow
from PySide6.QtWidgets import QApplication, QMainWindow
# 导入使用PySide6-Rcc工具转换的UI设计窗口Ui_MainWindow类
from testwindow_rc import Ui_MainWindow
# 创建的类继承PySide6的主窗口类QMainWindow
class TestMainWindow(QMainWindow):
def __init__(self):
# 执行父类QMainWindow的构造函数,从而让子类TestMainWindow的实例对象
# 具有父类的功能和属性
super().__init__()
# 创建Ui界面类实例,并赋值给TestMainWindow的实例对象属性ui
self.ui = Ui_MainWindow()
# 调用TestMainWindow的实例对象属性ui的setupUi()方法
# 传入实参self是TestMainWindow的实例对象,从而实现Ui界面元素的创建
self.ui.setupUi(self)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = TestMainWindow()
win.show()
sys.exit(app.exec())
三、直接载入Ui文件文章来源:https://www.toymoban.com/news/detail-853202.html
import sys
from PySide6.QtCore import QFile
from PySide6.QtUiTools import QUiLoader
# 导入PySide6库中的两个类:QApplication
from PySide6.QtWidgets import QApplication
class TestMainWindow:
def __init__(self):
super(TestMainWindow, self).__init__()
# 从ui文件中加载UI定义
qfile = QFile("testwindow.ui")
qfile.open(QFile.ReadOnly)
qfile.close()
# 从UI定义中动态创建一个相应的窗口对象
self.ui = QUiLoader().load(qfile)
if not self.ui:
print(QUiLoader().errorString())
sys.exit(-1)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = TestMainWindow()
win.ui.show()
sys.exit(app.exec())
笔者建议使用第一种方法,通过继承方式。文章来源地址https://www.toymoban.com/news/detail-853202.html
到了这里,关于Python学习笔记——PySide6设计GUI应用之UI与逻辑分离的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!