插入图形
在Qt Designer中只能插入一些Qt的控件,那么使用pyqtgraph 绘制的图形怎么插入到设计面板中呢?
使用pyqtgraph将需要的图形,定义到一个类中,形成图形窗口,然后在Qt designer中拖入一个QWidget空白窗口,右键 > 提升为 > 自定义类,配置头文件(导入路径)
注意:自定义类实例化时要传入一个父控件
如下效果:
自定义类
# __author__ = "laufing"
# class_based_qt
# laufing_qt
from PySide2.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QHBoxLayout, QVBoxLayout
from PySide2.QtCore import QTimer
from PySide2.QtGui import QIcon, QFont, QColor
import pyqtgraph as pg
from pyqtgraph import GraphicsLayoutWidget, PlotWidget
from pyqtgraph_7 import MyWindow
class PWin(QWidget):
def __init__(self, parent):
super(PWin, self).__init__()
self.resize(800, 600)
self.move(200, 200)
self.setUI(parent)
def setUI(self, parent):
# 实例化布局对象
vb = QVBoxLayout()
# 第一个子控件,写好的子窗口
myWin = MyWindow()
# 第二个子控件
pw = PlotWidget()
# 生成数据
import numpy as np
x = np.random.normal(loc=1, scale=2, size=1000)
freq, section = np.histogram(x, bins=50)
pw.plot(section, freq, stepMode="center", fillLevel=0, fillBrush=(100, 100, 100), fillOutline="r")
# 布局添加子控件
vb.addWidget(myWin)
vb.addWidget(pw)
vb.setSpacing(10)
vb.setStretch(0, 1)
vb.setStretch(1, 1)
# 父窗口 设置垂直布局
self.setLayout(vb)
# 设置父控件
self.setParent(parent)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
w = QWidget()
pwin = PWin(w)
w.show()
exit_code = app.exec_()
sys.exit(exit_code)
然后在Qt Designer中拖入一个QWidget空白控件,右键提升为该类。
最后将设计的界面转为py文件(即一个类)
# 展示界面
app = QApplication(sys.argv)
w = QWidget()
# 界面类 实例化并传入父控件
Ui_Form().setupUi(w)
w.show()
sys.exit(app.exec_())