• 【PyQt】pyqt加载调用ui界面文件的两种方法


    使用PyQt开发界面软件,自然会用到Qt Designer进行界面设计,拖拖按钮、设置菜单什么的,然后保存为 .ui 文件。但是在 Python 代码里面如何使用这些 .ui 文件呢?

    有两种方法:

    1. 使用pyuic编译ui文件

    这种方法较为常用。

    1. 使用 Qt Designer 绘制窗体界面,保存为.ui文件
    2. 使用 pyuic 工具将 .ui 文件编译成 同名的 .py 文件
    3. 将.py文件的类作为界面类供其他类文件加载

    代码如下:

    1. import sys
    2. from PyQt5.QtWidgets import QDialog, QApplication
    3. from maindlg import Ui_Dialog
    4. # 注意:ui界面文件是个对话框,那么MyApp就必须继承 QDialog
    5. # 类似的,若ui界面文件是个MainWindow,那么MyApp就必须继承 QMainWindow
    6. class MyApp(QDialog, Ui_Dialog):
    7. def __init__(self):
    8. super().__init__()
    9. self.setupUi(self) # 设置界面
    10. self.btn.clicked.connect(self.sayHi) # 绑定点击信号和槽函数
    11. def sayHi(self): # click对应的槽函数
    12. print("hi")
    13. if __name__ == "__main__":
    14. app = QApplication(sys.argv)
    15. myapp = MyApp()
    16. myapp.show()
    17. sys.exit(app.exec_())

    优缺点如下:

     pyuic5:

    优点:

    允许继承,和普通类一样

    运行程序时没有额外的负载

    缺点:

    每次修改ui文件时都得手动将 .ui 编译为 .py

    使用方法一,需要提前配置外部工具 pyuic,配置和使用方法见我的另一文:

    【PyQt】PyQt入门安装和Hello World_pyqt安装_qilei2010的博客-CSDN博客

    2. 在代码中使用loadUi直接加载ui文件

    使用 uic.loadUi() 简单粗暴,不用编译 .ui文件,直接就可以加载调用,相当于是把 .ui 文件当做了一个资源文件。所以在发布软件的时候,原始的.ui文件就必须和.exe一起发布,就像img等资源文件一样,所以要考虑而能否直接将 .ui 文件 发布给用户(用户可能会破坏该文件),需要仔细考虑。

    代码如下:

    1. from PyQt5 import QtWidgets, uic
    2. from PyQt5.QtWidgets import QApplication
    3. import sys
    4. # 注意:ui界面文件是个对话框,那么MyApp就必须继承 QDialog
    5. # 类似的,若ui界面文件是个MainWindow,那么MyApp就必须继承 QMainWindow
    6. class MyApp(QtWidgets.QDialog):
    7. def __init__(self):
    8. super().__init__()
    9. uic.loadUi('maindlg.ui', self)
    10. self.btn.clicked.connect(self.sayHi) # 绑定按钮的点击信号和对应的槽函数
    11. def sayHi(self): # 槽函数
    12. print("hi")
    13. if __name__ == "__main__":
    14. app = QApplication(sys.argv)
    15. myapp = MyApp()
    16. myapp.show()
    17. sys.exit(app.exec_())

    优点:

    修改ui时py代码无需修改

    编译额外时间

    缺点:

    不允许继承

    PyCharm中无法使用代码检查和自动补全

    3. 综合使用

    我推荐综合起来使用。

    在开发初期,使用 loadUi() 方式,快速实现预期效果。功能稳定后,再使用 pyuic 编译。

    4. 其它

    关于python软件的发布方法,参考我的这篇文章

    5. 关于无法从PyQt5中导入uic的问题

    有评论提到:无法从PyQt5中 import uic,pyqt5中没有uic函数,from PyQt5 import uic出错。

    我不清楚具体原因,猜想应是uic库文件未被软件检索到。我检查自己的PyCharm配置发现PyQt5下是有pyuic.py文件的。如图。

     解决方案:

    可以试着重新安装 pyqt5-tools 和 pyqt5designer。大概率是未安装 pyqt5-tools 或者安装错误。

     PyQt及Designer等配套工具的详细安装配置见我的另外一文:

    【PyQt】PyQt入门安装和Hello World_pyqt安装_qilei2010的博客-CSDN博客

    参考资料:

    pyqt 加载ui的两种方法pyuic5与uic.loadUi(动态加载ui)的优缺点_Bei_Luo的博客-CSDN博客_loadui

  • 相关阅读:
    react中如何对props传的参数进行必要的限制
    最大流=最小割 简单证明
    CentOS7 设置 MySQL 主备同步
    ArrayList & LinkedList
    Nginx 从入门到精通-Nginx-Web服务器的瑞士军刀
    计算机考研408难吗?学到什么程度才能考130?
    Citrix XenDesktop云桌面单点登录XenApp虚拟应用小技巧
    智能AI系统源码ChatGPT系统源码+详细搭建部署教程+AI绘画系统+已支持OpenAI GPT全模型+国内AI全模型
    这些嵌入式系统安全性的知识你需要了解
    树莓派基础配置
  • 原文地址:https://blog.csdn.net/qilei2010/article/details/126723285