pyqtgraph嵌入已经设计好的界面中&&动态绘图

1.界面设计

在这里插入图片描述

中间的方框是layout,这样做是为了方便pyqtgraph的定位。ui转换为.py文件:

test_ui.py

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

# Form implementation generated from reading ui file 'test.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


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.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(120, 60, 441, 331))
        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
        self.pyplot = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
        self.pyplot.setContentsMargins(0, 0, 0, 0)
        self.pyplot.setObjectName("pyplot")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 28))
        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)

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

2.将pyqtgraph添加入layout中

先上代码:

main.py

from PyQt5.QtWidgets import QMainWindow, QApplication, QHBoxLayout
import test_ui
import pyqtgraph as pg
import numpy as np
import sys


class pg_ui(QMainWindow):
    def __init__(self):
        super(pg_ui, self).__init__()
        self.InitUI()
        self.data_y = np.empty(31)
        self.data_x = []
        self.ptr = 0
        self.timer = pg.QtCore.QTimer()
        self.timer.timeout.connect(self.update_data)
        self.timer.start(100)

    def InitUI(self):
        ui = test_ui.Ui_MainWindow()
        ui.setupUi(self)

        ########################plot控件创建#####################
        # 全局参数设定
        pg.setConfigOptions(leftButtonPan=True)
        pg.setConfigOption('background', 'w')
        pg.setConfigOption('foreground', 'k')

        # 初始化控件
        self.pw = pg.PlotWidget()
        self.pw.setRange(xRange=[-300, 0])
        self.curve = self.pw.plot()
        ########################################################
        plot_display = self.findChild(QHBoxLayout, 'pyplot')
        # self.find()
        # print(plot_display)
        plot_display.addWidget(self.pw)
        # self.addDockWidget(self.pw)
        self.show()

    def update_data(self):
        # self.count_x += 10
        self.data_x.append(10*self.ptr)
        # print(10*self.data_x)
        self.data_y[self.ptr] = np.random.normal()
        self.ptr += 1
        if self.ptr >= self.data_y.shape[0]:
            temp = self.data_y
            self.data_y = np.empty(self.data_y.shape[0] * 2)
            self.data_y[:temp.shape[0]] = temp
        self.curve.setData(self.data_x[:self.ptr], self.data_y[:self.ptr])
        self.curve.setPos(-10 * self.ptr, 0)
        # if self.count_x % 1500 == 0:
        #     self.data_x = []
        #     self.data_y = []


if __name__ == '__main__':
    app = QApplication(sys.argv)
    test_ui = pg_ui()
    sys.exit(app.exec_())

运行的效果图如下所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9HUf3AXk-1607394015566)(/media/yangtao/AQUATAO/笔记/src/pyqtgraph嵌入测试效果图.png)]

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以通过QProcess类来实现将系统计算机界面嵌入到Qt软件界面。具体步骤如下: 1. 使用QProcess类启动系统计算机界面,例如Windows下的cmd.exe。 2. 在Qt软件界面添加一个QTextEdit部件,用于显示系统计算机界面的输出。 3. 使用QProcess类的readAllStandardOutput()函数获取系统计算机界面的输出,并将其显示在QTextEdit部件。 4. 可以通过QProcess类的write()函数向系统计算机界面发送命令,实现与系统计算机界面的交互。 以下是一个示例代码: ```cpp #include <QProcess> #include <QTextEdit> #include <QVBoxLayout> class Widget : public QWidget { public: Widget(QWidget *parent = nullptr) : QWidget(parent) { QVBoxLayout *layout = new QVBoxLayout(this); textEdit = new QTextEdit(this); layout->addWidget(textEdit); QProcess *process = new QProcess(this); process->setProgram("cmd.exe"); process->setArguments(QStringList() << "/K" << "dir"); process->start(); connect(process, &QProcess::readyReadStandardOutput, this, &Widget::onReadyReadStandardOutput); } private: QTextEdit *textEdit; private slots: void onReadyReadStandardOutput() { QByteArray output = static_cast<QProcess *>(sender())->readAllStandardOutput(); textEdit->insertPlainText(QString(output)); } }; ``` 这段代码启动了Windows下的cmd.exe,并执行了dir命令,将输出显示在了QTextEdit部件。可以通过修改setProgram()和setArguments()函数的参数来启动其他系统计算机界面和执行其他命令。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值