当前位置:   article > 正文

PyQt5 、PySide2导入Ui文件的两种方式_pyqt5 加载ui

pyqt5 加载ui

一、动态加载UI文件

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

如下:

  1. from PySide2.QtWidgets import QApplication, QMessageBox
  2. from PySide2.QtUiTools import QUiLoader
  3. class Stats:
  4. def __init__(self):
  5. # 从文件中加载UI定义
  6. # 从 UI 定义中动态 创建一个相应的窗口对象
  7. # 注意:里面的控件对象也成为窗口对象的属性了
  8. # 比如 self.ui.button , self.ui.textEdit
  9. self.ui = QUiLoader().load('main.ui') #pyside2
  10. # 如果你使用的是PyQt5 而不是 PySide2,加载UI文件的代码如下
  11. # self.ui = uic.loadUi("main.ui") #PyQt
  12. self.ui.button.clicked.connect(self.handleCalc)
  13. def handleCalc(self):
  14. print("hand clicked")
  15. if __name__ == '__main__':
  16. app = QApplication([])
  17. stats = Stats()
  18. stats.ui.show()
  19. app.exec_()

二、转化UI文件为Python代码

还有一种使用UI文件的方式:先把UI文件直接转化为包含界面定义的Python代码文件,然后在你的程序中使用定义界面的类

  1. 执行如下的命令 把UI文件直接转化为包含界面定义的Python代码文件
pyside2-uic main.ui > ui_main.py

如果你安装的是PyQt5,执行如下格式的命令转化

pyuic5 main.ui > ui_main.py

然后在你的代码文件中这样使用定义界面的类

  1. from PySide2.QtWidgets import QApplication,QMainWindow
  2. from ui_main import Ui_MainWindow
  3. # 注意 这里选择的父类 要和你UI文件窗体一样的类型
  4. # 主窗口是 QMainWindow, 表单是 QWidget, 对话框是 QDialog
  5. class MainWindow(QMainWindow):
  6. def __init__(self):
  7. super().__init__()
  8. # 使用ui文件导入定义界面类
  9. self.ui = Ui_MainWindow()
  10. # 初始化界面
  11. self.ui.setupUi(self)
  12. self.ui.button.clicked.connect(self.handleCalc)
  13. def handleCalc(self):
  14. print("hand clicked")
  15. if __name__ == '__main__':
  16. app = QApplication([])
  17. mainw = MainWindow()
  18. mainw.show()
  19. app.exec_()

那么我们该使用哪种方式比较好呢?动态加载还是转化为Python代码?

通常采用动态加载比较方便,因为改动界面后,不需要转化,直接运行,特别方便。缺点是有的类和方法不能自动补全,有时候难以接受。

如果 你的程序里面有非qt designer提供的控件, 这时候,需要在代码里面加上一些额外的声明,而且 可能还会有奇怪的问题。往往就 要采用 转化Python代码的方法。并且有自动补全,生成软件包的时候也比较方便

个人推荐使用转化UI文件为Python代码的方式

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/980638
推荐阅读
相关标签
  

闽ICP备14008679号