使用PyQt开发界面软件,自然会用到Qt Designer进行界面设计,拖拖按钮、设置菜单什么的,然后保存为 .ui 文件。但是在 Python 代码里面如何使用这些 .ui 文件呢?
有两种方法:
方法1:使用pyuic编译ui文件
这种方法较为常用。
- 使用 Qt Designer 绘制窗体界面,保存为.ui文件
- 使用 pyuic 工具将 .ui 文件编译成 同名的 .py 文件
- 将.py文件的类作为界面类供其他类文件加载
代码如下:
import sys
from PyQt5.QtWidgets import QDialog, QApplication
from maindlg import Ui_Dialog
# 注意:ui界面文件是个对话框,那么MyApp就必须继承 QDialog
# 类似的,若ui界面文件是个MainWindow,那么MyApp就必须继承 QMainWindow
class MyApp(QDialog, Ui_Dialog):
def __init__(self):
super().__init__()
self.setupUi(self) # 设置界面
self.btn.clicked.connect(self.sayHi) # 绑定点击信号和槽函数
def sayHi(self): # click对应的槽函数
print("hi")
if __name__ == "__main__":
app = QApplication(sys.argv)
myapp = MyApp()
myapp.show()
sys.exit(app.exec_())
优缺点如下:
pyuic5:
优点:
允许继承,和普通类一样
运行程序时没有额外的负载
缺点:
每次修改ui文件时都得手动将 .ui 编译为 .py
方法2:在代码中使用loadUi直接加载ui文件
使用 uic.loadUi() 简单粗暴,不用编译 .ui文件,直接就可以加载调用,相当于是把 .ui 文件当做了一个资源文件。所以在发布软件的时候,原始的.ui文件就必须和.exe一起发布,就像img等资源文件一样,所以要考虑而能否直接将 .ui 文件 发布给用户(用户可能会破坏该文件),需要仔细考虑。
代码如下:
from PyQt5 import QtWidgets, uic
from PyQt5.QtWidgets import QApplication
import sys
# 注意:ui界面文件是个对话框,那么MyApp就必须继承 QDialog
# 类似的,若ui界面文件是个MainWindow,那么MyApp就必须继承 QMainWindow
class MyApp(QtWidgets.QDialog):
def __init__(self):
super().__init__()
uic.loadUi('maindlg.ui', self)
self.btn.clicked.connect(self.sayHi) # 绑定按钮的点击信号和对应的槽函数
def sayHi(self): # 槽函数
print("hi")
if __name__ == "__main__":
app = QApplication(sys.argv)
myapp = MyApp()
myapp.show()
sys.exit(app.exec_())
优点:
修改ui时py代码无需修改
编译额外时间
缺点:
不允许继承
PyCharm中无法使用代码检查和自动补全
3. 综合使用
我推荐综合起来使用。
在开发初期,使用 loadUi() 方式,快速实现预期效果。功能稳定后,再使用 pyuic 编译。
4. 其它
关于python软件的发布方法,参考我的这篇文章。
参考文章:
pyqt 加载ui的两种方法pyuic5与uic.loadUi(动态加载ui)的优缺点_Bei_Luo的博客-CSDN博客_loadui
版权归原作者 qilei2010 所有, 如有侵权,请联系我们删除。