赞
踩
有了界面定义文件,我们的Python程序就可以从文件中加载UI定义,并且动态 创建一个相应的窗口对象。
如下:
- 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') #pyside2
-
- # 如果你使用的是PyQt5 而不是 PySide2,加载UI文件的代码如下
- # self.ui = uic.loadUi("main.ui") #PyQt
-
- self.ui.button.clicked.connect(self.handleCalc)
-
- def handleCalc(self):
- print("hand clicked")
-
-
-
- if __name__ == '__main__':
-
- app = QApplication([])
- stats = Stats()
- stats.ui.show()
- app.exec_()
还有一种使用UI文件的方式:先把UI文件直接转化为包含界面定义的Python代码文件,然后在你的程序中使用定义界面的类
pyside2-uic main.ui > ui_main.py
如果你安装的是PyQt5,执行如下格式的命令转化
pyuic5 main.ui > ui_main.py
然后在你的代码文件中这样使用定义界面的类
- from PySide2.QtWidgets import QApplication,QMainWindow
-
- from ui_main import Ui_MainWindow
-
-
- # 注意 这里选择的父类 要和你UI文件窗体一样的类型
- # 主窗口是 QMainWindow, 表单是 QWidget, 对话框是 QDialog
-
- class MainWindow(QMainWindow):
-
- def __init__(self):
- super().__init__()
-
- # 使用ui文件导入定义界面类
- self.ui = Ui_MainWindow()
-
- # 初始化界面
- self.ui.setupUi(self)
-
- self.ui.button.clicked.connect(self.handleCalc)
-
-
- def handleCalc(self):
- print("hand clicked")
-
-
-
- if __name__ == '__main__':
-
- app = QApplication([])
- mainw = MainWindow()
- mainw.show()
- app.exec_()
那么我们该使用哪种方式比较好呢?动态加载还是转化为Python代码?
通常采用动态加载比较方便,因为改动界面后,不需要转化,直接运行,特别方便。缺点是有的类和方法不能自动补全,有时候难以接受。
如果 你的程序里面有非qt designer提供的控件, 这时候,需要在代码里面加上一些额外的声明,而且 可能还会有奇怪的问题。往往就 要采用 转化Python代码的方法。并且有自动补全,生成软件包的时候也比较方便
个人推荐使用转化UI文件为Python代码的方式
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。