通常来说开发Qt的界面基本都在Qt Designer中进行的,它保存的文件为.ui,我们可以通过uic将其转变为.py文件(如何使用:Pyside6:安装及Pycharm配置_pyside6安装pycharm-CSDN博客)。
那么该如何进行加载呢?大致来说有两种方法:
一、使用QUiLoader加载
from PySide6.QtUiTools import QUiLoader
from PySide6.QtWidgets import QApplication
from PySide6.QtCore import QFile
import sys
if __name__ == '__main__':
app = QApplication(sys.argv)
ui_file = QFile("ui/xxx.ui")
ui_file.open(QFile.ReadOnly)
loader = QUiLoader()
window = loader.load(ui_file)
window.show()
sys.exit(app.exec())
这个非常简单,无需把.ui文件进行转换,但loader.load(ui_file)出来的类型都是基本类型,可能无法完成很多自定义的开发需求。所以需要扩展QUiLoader进行派生类调用,还有一些QUiLoader的方法可以使用,但本篇不讨论。
二、使用.py加载
2.1外部添加
当我们使用外部添加ui时,需要让ui.setupUi()方法中传入我们实例的对象:
# -*- coding: utf-8 -*-
from PySide6.QtWidgets import QApplication
import sys
from MyMainWindow import MyMainWindow
from ui import main_window_ui
if __name__ == '__main__':
app = QApplication(sys.argv)
MainWindow = MyMainWindow()
ui = main_window_ui.Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec())
优点:可以为不同的实例对象快速添加不同的ui,不需要在Designer中进行提升
缺点:实例对象中想使用ui中的对象,需要额外引用,且无法进行代码联想提示
2.2内部添加
内部添加即在我们调用__init__时,将ui挂载到引用对象上:
# -*- coding: utf-8 -*-
from PySide6.QtWidgets import QMainWindow
from ui.main_window_ui import Ui_MainWindow
class MyMainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
优点:可以在实例对象中方便地调用ui中的对象,且可以进行代码联想提示
缺点:一个ui对应一个类,需要在Designer中进行提升才能方便使用
以上方法需要uic进行转换为.py,此时可以直接使用一个我们的派生类进行扩展,非常方便。本人推荐使用内部添加的方法,此方法可以方便地开发,能够使用代码提示功能。
三、总结
真实开发环境还是使用.py开发最合适,因此更推荐第二种方法中的内部添加。