PySide6从0开始学习的笔记(二十一) 使用loadUi直接加载.ui文件

如果不使用pyuic将.ui文件(在designer中组态好的界面文件)转换成.py文件使用,可以使用loadUi的方法直接在代码中加载.ui文件。


一、loadUi的方法

  • PyQt5:
python 复制代码
import sys

from PyQt5 import uic
from PyQt5.QtWidgets import QApplication

def main():
    app = QApplication(sys.argv)
    form = uic.loadUi("form.ui")
    form.show()
    sys.exit(app.exec())

if __name__ == "__main__":
    main()

以及:

python 复制代码
import sys

from PyQt5 import uic
from PyQt5.QtWidgets import QApplication

def main():
    app = QApplication(sys.argv)
    window = uic.loadUi("mainwidow.ui")
    form = uic.loadUi("form.ui")
    window.setCentralWidget(form)
    window.show()
    sys.exit(app.exec())

if __name__ == "__main__":
    main()

  • PySide6:

PySide6稍微有点复杂,需要先创建一个加载器:

python 复制代码
import sys

from PySide6.QtUiTools import QUiLoader
from PySide6.QtWidgets import QApplication


def main():
    # 1. 实例化 QUiLoader
    loader = QUiLoader()
    # 2. 创建应用程序对象
    app = QApplication(sys.argv)
    # 3. 加载 .ui 文件,返回界面根控件
    window = loader.load("mainwidow.ui")
    window.form = loader.load("form.ui", window)
    window.setCentralWidget(window.form)
    # 4. 显示界面
    window.show()
    window.form.pushButton.clicked.connect(lambda: print("clicked"))

    sys.exit(app.exec())

if __name__ == "__main__":
    main()
复制代码
PySide6的特别注意事项:

    实例化加载器(QUiLoader)必须在创建应用程序对象(QApplication)之前,否则程序会卡死在这里。
看代码:
python 复制代码
import sys

from PySide6.QtUiTools import QUiLoader
from PySide6.QtWidgets import QApplication


def main():
    # 1. 实例化 QUiLoader
    # loader = QUiLoader()
    # 2. 创建应用程序对象
    app = QApplication(sys.argv)
    print('创建应用程序完毕')
    loader = QUiLoader()
    print('加载完毕')
    # 3. 加载 .ui 文件,返回界面根控件
    window = loader.load("mainwidow.ui")
    window.form = loader.load("form.ui", window)
    window.setCentralWidget(window.form)
    # 4. 显示界面
    window.show()
    window.form.pushButton.clicked.connect(lambda: print("clicked"))

    sys.exit(app.exec())

if __name__ == "__main__":
    main()

运行结果,卡死在loader:

复制代码
        这也就是qdarkstyle的官方范例不能在pyside6模式下正常运行的原因,它的加载器在应用程序对象(QApplication)之后才创建的。

二、loadUi方法与pyuic方法的比较

与pyuic方法相比,pyuic是将.ui文件转换成.py文件,再将.py文件实例化以后使用,步骤上稍微麻烦一些。但是pyuic方法的优点是.py文件实例化以后,它的所有构件就"透明"了;而loadUi方法是动态创建窗口,窗口的构件在代码中是不可见的。在具有自动代码补全的IDE,比如pycharm中,pyuic方法显然更有优势,它会自动补全子构件名称和检查子构件的合法性。而loadUi方法的代码在IDE中是这样的:

所有构件都是未解析,无法自动补全和检查子构件的合法性。

我的习惯,简单项目用loadUi方法,复杂项目用pyuic方法。

复制代码
相关推荐
俊哥工具1 天前
不用安装不收费!多功能U盘修复工具,解决大部分U盘故障
学习·pdf·word·excel·音视频
Data_Journal1 天前
什么是数据采购,它究竟如何运作?
大数据·开发语言·数据库·人工智能·python
fanged1 天前
SI/PI基础(TODO)
笔记
Gigavision1 天前
SEED-VII 数据集介绍:面向七类情绪识别的 EEG 与眼动多模态数据集
人工智能·python·算法·脑机接口
_Evan_Yao1 天前
大学自学能力怎么练?慕课、B站、书籍资源清单
后端·学习
烟雨江南aabb1 天前
Python第七弹:爬虫篇:BeautifulSoup库
爬虫·python·beautifulsoup
xu_wenming1 天前
从熟悉概念到掌控工程——Zephyr 系统级项目实战笔记
笔记
W.W.H.1 天前
Qt 应用防多开:极简单例方案
开发语言·qt·单例模式·共享内存
-To be number.wan1 天前
数据库多表查询全攻略
数据库·学习
枫叶v.1 天前
Scrapling 入门:一个现代 Python 网页采集框架
开发语言·python