QT5、QTSide2:
安装后,可以直接拉起编辑器编辑界面,或者再python的安装路径下\Python38\Scripts\ pyside2-designer.exe直接打开新建
新建时注意自己选的模板类型及集成的父类(很重要)后面通过py方式加载界面时用到。
控件之间的比例调整,对齐方式等都是通过layouts布局实现的,最后要给最上层的Form对接指定布局,可以实现窗口控件拉伸自适应的效果。
如果要对单个控件进行布局适配,要将该控件单独添加到一个layout中来实现,如下图:
布局完成后,保存为.ui的文件,可以在py脚本中加载,我们使用pyside2的designer,所以引用库时也选择pyside2:
from PySide2.QtWidgets import QApplication
from PySide2.QtUiTools import QUiLoader
class Ios_perfer():
def __init__(self):
loader = QUiLoader()
loader.registerCustomWidget(pg.PlotWidget) /这里是项目中嵌入了画图的功能,要单独注册一下后面会说
self.ui = loader.load('iosPerfer.ui') /通过加载ui文件实现ui对象的实例化
self.ui.pushButton_stop.setEnabled(False)
self.ui.pushButton_start.clicked.connect(self.start_perfer)
添加画布graphicsView,PyQtGraph 中 绘图控件类 有两种 PlotWidget 和 GraphicsLayoutWidget, 都是 GraphicsView 子类。GraphicsView 是 Qt 的 QGraphicsView 子类,在其基础上改进了一些功能。
选中控件提升为PlotWidget类,头文件用pyqtgraph:
点击提升:
以上完成后,需要再类的初始化ui的地方注册一下,就可以操作ui.graphicsView控件了:
import pyqtgraph as pg
class Ios_perfer():
def __init__(self):
loader = QUiLoader()
loader.registerCustomWidget(pg.PlotWidget)
pyqt应用打包:
同样适用pyinstaller进行打包,但是如果是加载.ui方式的,ui文件要和exe放在同一个目录下才行,如何把ui文件也打进去?
解决方法:
1、将ui文件转换为py文件:
在\Python38\Scripts\ pyside2-designer.exe的同级路径下有2个转换exe工具,pyside2-uic.exe pyuic5.exe 拷贝到ui文件所在路径下执行,pyside2-uic iosPerfer.ui > iosPerfer.py,我们的ui文件是通过pyside2 designer保存的,所以用pyside2-uic转换。转换后生成的py文件,pyqtgraph绘图也会自动处理:
from pyqtgraph import PlotWidget
class Ui_Form(object):
def setupUi(self, Form):
…
self.graphicsView = PlotWidget(Form)
self.graphicsView.setObjectName(u"graphicsView")
self.graphicsView.setEnabled(True)
2、主应用调用py中的ui类:父类如果继承错误会报各种layout不兼容错误,类似:
QLayout: Attempting to add QLayout "" to QMainWindow "Form", which already has a layout
from PySide2.QtWidgets import QWidget
from iosPerfer import Ui_Form 转换为py文件的ui类
class Ios_perfer(QWidget): /这里继承的父类是QWidget还是QMainWindow,取决于前面提到的designer设计时最上层form类类型
def __init__(self):
super().__init__() /初始化父类 QWidget
self.ui = Ui_Form() ///初始化对象
self.ui.setupUi(self) ///调用setup方法
self.ui.pushButton_stop.setEnabled(False)
app = QApplication([])
perfer = Ios_perfer()
perfer.show()
app.exec_()
3、编译运行通过后,ui文件就转换为py文件,这时候通过pyinstaller打包就是完成的exe,不依赖其它外部文件了。