动态加载UI文件

本文介绍了如何在Python中动态加载Qt Designer创建的UI文件,通过pyside2和pyqt5两种方式演示加载过程,包括代码示例、错误处理及解决方法,强调了使用Qt Designer设计界面的好处,如实时预览和便于后期维护。
摘要由CSDN通过智能技术生成

来源

http://www.python3.vip/tut/py/gui/qt_03/#%E5%8A%A8%E6%80%81%E5%8A%A0%E8%BD%BDui%E6%96%87%E4%BB%B6

在这里插入图片描述

回顾

前面的话,我们是已经通过Qt设计师创建了界面的定义
在这里插入图片描述
但是这个定义创建完成之后只是存成了一个ui文件

在这里插入图片描述

思考

1.我们的程序应该如何使用这个界面呢?

2.我们的程序怎么根据这个ui界面创建出实际的能够展现在显示器上的那种类型的程序界面呢?

尝试解决问题

有了界面定义文件,我们的Python程序就可以从文件中加载UI定义,并且动态地创建一个相应的窗口对象。

pyside2

from PySide2.QtWidgets import QApplication, QMessageBox
from PySide2.QtUiTools import QUiLoader

class Stats:

    def __init__(self):
        # 从文件中加载UI定义

        # 从 UI 定义中动态 创建一个相应的窗口对象
        # 注意:里面的控件对象也成为窗口对象的属性了
        # 比如 self.ui.button , self.ui.textEdit
        self.ui = QUiLoader().load('main.ui')

        self.ui.button.clicked.connect(self.handleCalc)

    def handleCalc(self):
        info = self.ui.textEdit.toPlainText()

        salary_above_20k = ''
        salary_below_20k = ''
        for line in info.splitlines():
            if not line.strip():
                continue
            parts = line.split(' ')

            parts = [p for p in parts if p]
            name,salary,age = parts
            if int(salary) >= 20000:
                salary_above_20k += name + '\n'
            else:
                salary_below_20k += name + '\n'

        QMessageBox.about(self.ui,
                    '统计结果',
                    f'''薪资20000 以上的有:\n{salary_above_20k}
                    \n薪资20000 以下的有:\n{salary_below_20k}'''
                    )

app = QApplication([])
stats = Stats()
stats.ui.show()
app.exec_()

pyqt5

from PyQt5 import uic

class Stats:

    def __init__(self):
        # 从文件中加载UI定义
        self.ui = uic.loadUi("main.ui")

代码演示

将示例中的代码复制到我们的pycharm编辑器中
在这里插入图片描述

需要修改ui文件的位置
在这里插入图片描述
这个是我的文件树
在这里插入图片描述

代码解释

# 从 UI 定义中动态 创建一个相应的窗口对象
# 注意:里面的控件对象也成为窗口对象的属性了
# 比如 self.ui.button , self.ui.textEdit
self.ui = QUiLoader().load('ui_files/stats.ui')  # ui文件的相对位置
# 返回一个窗口对象

窗口对象的属性的名字是和界面设计时的名字是一一对应的

在这里插入图片描述
在这里插入图片描述

运行程序

报错

在这里插入图片描述

RuntimeError: Unable to open/read ui device

报错的代码
在这里插入图片描述
结合错误提示进行思考

在这里插入图片描述

解决错误

在这里插入图片描述

再次运行程序

在这里插入图片描述
我们可以在编辑框中输入一些信息

在这里插入图片描述
在这里插入图片描述

分析

加载ui文件 & 全手工代码

只是界面发生了改变,里面的处理代码是一样的

def handleCalc(self):
    info = self.ui.textEdit.toPlainText()

    salary_above_20k = ''
    salary_below_20k = ''
    for line in info.splitlines():
        if not line.strip():
            continue
        parts = line.split(' ')

        parts = [p for p in parts if p]
        name,salary,age = parts
        if int(salary) >= 20000:
            salary_above_20k += name + '\n'
        else:
            salary_below_20k += name + '\n'

    QMessageBox.about(self.ui,
                '统计结果',
                f'''薪资20000 以上的有:\n{salary_above_20k}
                \n薪资20000 以下的有:\n{salary_below_20k}'''
                )
                

使用Qt Designer的好处

  • 可以直接先把程序界面的样式设计好,还可以实时预览

在这里插入图片描述
这里是引用

  • 当我们需要对界面中的某个控件进行改动的时候,不需要改动任何的代码,可以直接在Qt Designer中修改我们代码加载的ui文件

这里是引用
注意:不要忘记【保存】
直接再次运行代码
在这里插入图片描述

  • 很好地实现了界面设计和功能代码的分离,方便后期维护

重点

def __init__(self):
	# 从文件中加载UI定义
	
	# 从 UI 定义中动态 创建一个相应的窗口对象
	# 注意:里面的控件对象也成为窗口对象的属性了
	# 比如 self.ui.button , self.ui.textEdit
	self.ui = QUiLoader().load('../ui_files/stats.ui')  # ui文件的相对位置
	# 返回一个窗口对象
	
	self.ui.button.clicked.connect(self.handleCalc)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值