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

复制代码
相关推荐
玄同7653 小时前
从 0 到 1:用 Python 开发 MCP 工具,让 AI 智能体拥有 “超能力”
开发语言·人工智能·python·agent·ai编程·mcp·trae
小瑞瑞acd3 小时前
【小瑞瑞精讲】卷积神经网络(CNN):从入门到精通,计算机如何“看”懂世界?
人工智能·python·深度学习·神经网络·机器学习
驭渊的小故事3 小时前
简单模板笔记
数据结构·笔记·算法
火车叼位3 小时前
也许你不需要创建.venv, 此规范使python脚本自备依赖
python
stevenson_aspdotnet3 小时前
QT5.15.12 编译备忘
qt
火车叼位3 小时前
脚本伪装:让 Python 与 Node.js 像原生 Shell 命令一样运行
运维·javascript·python
孤狼warrior4 小时前
YOLO目标检测 一千字解析yolo最初的摸样 模型下载,数据集构建及模型训练代码
人工智能·python·深度学习·算法·yolo·目标检测·目标跟踪
Katecat996634 小时前
YOLO11分割算法实现甲状腺超声病灶自动检测与定位_DWR方法应用
python
野犬寒鸦4 小时前
从零起步学习并发编程 || 第七章:ThreadLocal深层解析及常见问题解决方案
java·服务器·开发语言·jvm·后端·学习
陈桴浮海4 小时前
【Linux&Ansible】学习笔记合集二
linux·学习·ansible