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

复制代码
相关推荐
小白舒_SC12 分钟前
多个VS版本的Qt VS Tools的QtMsBuild不兼容问题
经验分享·qt
某人辛木28 分钟前
Web自动化测试
前端·python·pycharm·pytest
C+++Python1 小时前
详细介绍一下Java泛型的通配符
java·windows·python
江畔柳前堤2 小时前
github实战指南01-账号配置与 SSH 密钥
运维·人工智能·深度学习·ssh·github·pyqt·信号处理
小帅热爱难回头2 小时前
编写Skill生成AI落地项目系统架构
python
diving deep2 小时前
脚本速览-python
开发语言·python
2601_951643774 小时前
Python第一,Java跌出前三,C语言杀回来了
java·c语言·python·编程语言排行·技术趋势
千寻girling6 小时前
记录第一次学习 Docker
学习·docker·容器
AC赳赳老秦6 小时前
OpenClaw+Power Apps 实战:自动生成 Power Apps 应用、连接 Excel 数据源
大数据·开发语言·python·serverless·excel·deepseek·openclaw
Kobebryant-Manba6 小时前
学习RNN(简洁实现)
人工智能·rnn·学习