将一个pyqtgraph的小部件加入到Qt的main window里

以下代码中,class Ui_MainWindow(object)的定义是由.ui文件转过来的,如何转参见用python实现GUI开发
在Ui_MainWindow中setupUi函数的最后一句,加入

self.verticalLayout.addWidget(chart())

调用verticalLayout的addWidget方法,将pyqtgraph画的小部件加入到Qt Designer设计的verticalLayout中。
addWidget方法需要Widget类的对象作为输入。
而chart()方法的返回值正是Widget类,通过打印可以看到是pyqtgraph.widgets.PlotWidget.PlotWidget对象

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'example2.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!


from PyQt5 import QtCore, QtGui, QtWidgets
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
import pyqtgraph as pg
import tushare as ts
import datetime
from matplotlib.pylab import date2num
import numpy as np

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(50, 20, 671, 171))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        # 将char()函数画的图形通过verticalLayout的addWidget方法加入到verticalLayout中
        self.verticalLayout.addWidget(chart())


    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


def chart():
    lis=range(1000)
    x=np.array(lis)
    y = np.random.normal(size=1000)
    plt=pg.PlotWidget()
    plt.plot(x,y,pen='r')
    plt.showGrid(x=True,y=True)
    print(type(plt))
    return plt

if __name__ == '__main__':
   app = QApplication(sys.argv)
   MainWindow = QMainWindow()
   ui = Ui_MainWindow()
   ui.setupUi(MainWindow)
   MainWindow.show()
   sys.exit(app.exec_())

发布了21 篇原创文章 · 获赞 10 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_43196262/article/details/105495087