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方法。

复制代码
相关推荐
benchmark_cc9 小时前
如何用 Python + QuantDash 快速构建高胜率“配对交易(Pairs Trading)”策略?
开发语言·人工智能·python·pandas·量化交易·quantdash
踏月的造梦星球9 小时前
DMDPC 学习:架构、部署、运维与调优
运维·数据库·学习·架构
Python+9910 小时前
Java 枚举类(Enum)详解:从基础到高级应用
java·开发语言·python
dunge202611 小时前
2026年7月最新ChatGPT Plus / Pro 与 Codex:当 AI Agent 最新5.6版本来袭,必须理解事务、幂等与补偿
开发语言·人工智能·python
GHL28427109012 小时前
unreferenced formal parameter 解决办法学习
学习
小白学大数据13 小时前
两周完成爬虫技术栈升级:Scrapy 迁移 Crawlo 的路径与取舍
爬虫·python·scrapy
用户83562907805113 小时前
使用 Python 在 Excel 中添加和自定义文本框
后端·python
fanchenxinok13 小时前
学习笔记:LabVIEW调用DLL解析S19文件教程
笔记·学习·labview·dll解析
疯狂打码的少年14 小时前
【软件工程】结构化设计:模块独立性与耦合内聚
java·开发语言·笔记·软件工程
总裁余(余登武)14 小时前
python多个py文件打包【解决exe不能移动运行bug】
python