页面PlotWidget图形np.数组进入GUI

2024-04-25 05:58:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试了不同的方法来追踪np.数组变成一个页面PlotWidget进入GUI。 不起作用,当我按我的按钮

import sys
import pandas as pd
import re
import numpy as np
import matplotlib.pyplot as plt
import pyqtgraph as pg
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QInputDialog, QLineEdit, QFileDialog

class Ui_MainWindow(object):
    def __init__(self):
        self.df = pd.DataFrame()
        self.f_SamplingFreq = 0.0
        self.My_List_Name_Measure = []
        self.str_Name_Measure_Current = ""
        self.index_Measure_Current = 0
        self.List_Data_Raw_Signal = []

    def setupUi(self, MainWindow):
        self.push_Open_Data = QtWidgets.QPushButton(self.centralwidget)
        self.push_Open_Data.setGeometry(QtCore.QRect(10, 10, 80, 21))
        self.push_Open_Data.setStyleSheet("color: rgb(255, 255, 255);\n"
        "background-color: rgb(117, 117, 117);")
        self.push_Open_Data.setObjectName("push_Open_Data")
        self.push_Open_Data.clicked.connect(self.on_click_Open_Data)
        self.graphicsView_SignalSource = pg.PlotWidget(self.centralwidget)
        self.graphicsView_SignalSource.setGeometry(QtCore.QRect(30, 80, 421, 291))
        self.graphicsView_SignalSource.setStyleSheet("background-color: rgb(44, 44, 44);")
        self.graphicsView_SignalSource.setObjectName("graphicsView_SignalSource")


    def on_click_Open_Data(self):
        x = np.array([1,45,8,9])
        y = np.array([1, 4, 9, 16])
        curve = pg.PlotCurveItem(pen='r')
        curve.setData(x)
        self.graphicsView_SignalSource.addItem(curve.getData())
def main():
    app = QtWidgets.QApplication(sys.argv)
    ex = Ui_MainWindow()
    w = QtWidgets.QMainWindow()
    ex.setupUi(w)
    w.show()
    sys.exit(app.exec_())

## Start Qt event loop unless running in interactive mode.
if __name__ == '__main__':
    main()

进程已完成,退出代码为-1073740791(0xc000409)

谢谢你的帮助


Tags: importselfdatadefasnpsysopen
1条回答
网友
1楼 · 发布于 2024-04-25 05:58:16

我想您已经消除了像centralwidget这样的元素,并且在您的原始代码中已经消除了它。另一方面,潜在的问题是,添加项时必须添加项,而不是与项关联的数据,因此代码应如下所示:

class Ui_MainWindow(object):
    def __init__(self):
        self.df = pd.DataFrame()
        self.f_SamplingFreq = 0.0
        self.My_List_Name_Measure = []
        self.str_Name_Measure_Current = ""
        self.index_Measure_Current = 0
        self.List_Data_Raw_Signal = []

    def setupUi(self, MainWindow):
        self.centralwidget = QtWidgets.QWidget() # < -
        MainWindow.setCentralWidget(self.centralwidget) # < -
        self.push_Open_Data = QtWidgets.QPushButton(self.centralwidget)
        self.push_Open_Data.setGeometry(QtCore.QRect(10, 10, 80, 21))
        self.push_Open_Data.setStyleSheet("color: rgb(255, 255, 255);\n"
        "background-color: rgb(117, 117, 117);")
        self.push_Open_Data.setObjectName("push_Open_Data")
        self.push_Open_Data.clicked.connect(self.on_click_Open_Data)
        self.graphicsView_SignalSource = pg.PlotWidget(self.centralwidget)
        self.graphicsView_SignalSource.setGeometry(QtCore.QRect(30, 80, 421, 291))
        self.graphicsView_SignalSource.setStyleSheet("background-color: rgb(44, 44, 44);")
        self.graphicsView_SignalSource.setObjectName("graphicsView_SignalSource")

    def on_click_Open_Data(self):
        x = np.array([1,45,8,9])
        y = np.array([1, 4, 9, 16])
        curve = pg.PlotCurveItem(pen='r')
        curve.setData(x)
        self.graphicsView_SignalSource.addItem(curve) # < -

另一方面,我建议您使用布局,以便您的设计可以处理的大小没有问题,我如下所示:

import sys
from PyQt5 import QtCore, QtWidgets
import pyqtgraph as pg
import numpy as np


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        central_widget = QtWidgets.QWidget()
        self.setCentralWidget(central_widget)

        button = QtWidgets.QPushButton()
        button.setFixedSize(80, 21)
        button.setStyleSheet("color: rgb(255, 255, 255);\n"
        "background-color: rgb(117, 117, 117);")
        button.clicked.connect(self.on_click_Open_Data)

        self.graphicsView_SignalSource = pg.PlotWidget()

        vlay = QtWidgets.QVBoxLayout(central_widget)
        hlay = QtWidgets.QHBoxLayout()
        hlay.addWidget(button)
        hlay.addStretch()
        vlay.addLayout(hlay)
        vlay.addWidget(self.graphicsView_SignalSource)

    @QtCore.pyqtSlot()
    def on_click_Open_Data(self):
        x = np.array([1,45,8,9])
        y = np.array([1, 4, 9, 16])
        curve = pg.PlotCurveItem(pen='r')
        curve.setData(x)
        self.graphicsView_SignalSource.addItem(curve)

def main():
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

最后,许多IDE不能正确地处理错误消息,只指出一个错误代码,如-1073740791(0xc000409),它们永远不会有帮助,在这些情况下最好的办法是在CMD或控制台中执行脚本,因为它们会给您一个更具描述性的消息。你知道吗

相关问题 更多 >