Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在QT.ui中嵌入pyqtgraph绘图?_Python_Python 3.x_Pyqt_Qt Designer_Pyqtgraph - Fatal编程技术网

Python 在QT.ui中嵌入pyqtgraph绘图?

Python 在QT.ui中嵌入pyqtgraph绘图?,python,python-3.x,pyqt,qt-designer,pyqtgraph,Python,Python 3.x,Pyqt,Qt Designer,Pyqtgraph,首先,我希望你们能给我一些耐心,因为我是这类项目的新手,我也希望不要问愚蠢的问题。这就是说,我的主要目标是为树莓皮3创建一个用户界面,它可以感应电池和太阳能电池板的电压、电流等 因为我正在研究一种树莓,并且对Python3有一些了解,所以我决定使用QTCreator,据我所知,它可以通过pyqt()翻译成Python3。我将其安装在我的raspberry pi上,并制作了以下UI: 拥有基本UI后,我使用pyuic5命令将.UI文件转换为.py,并能够使用“python3 main.py”打开U

首先,我希望你们能给我一些耐心,因为我是这类项目的新手,我也希望不要问愚蠢的问题。这就是说,我的主要目标是为树莓皮3创建一个用户界面,它可以感应电池和太阳能电池板的电压、电流等

因为我正在研究一种树莓,并且对Python3有一些了解,所以我决定使用QTCreator,据我所知,它可以通过pyqt()翻译成Python3。我将其安装在我的raspberry pi上,并制作了以下UI:

拥有基本UI后,我使用pyuic5命令将.UI文件转换为.py,并能够使用“python3 main.py”打开UI,一切似乎都正常:

打开main.py文件后UI的外观

现在,我想在UI上绘制几个图(比如电压与时间的关系等)。我使用以下内容进行测试:

import sys
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
import numpy as np

pg.setConfigOption('background', 'w')
pg.setConfigOption('foreground', 'k')
win = pg.GraphicsWindow()
win.setWindowTitle('pyqtgraph example: Scrolling Plots')


p1 = win.addPlot(labels =  {'left':'Voltage', 'bottom':'Time'})
data1 = np.random.normal(size=10)
data2 = np.random.normal(size=10)
curve1 = p1.plot(data1, pen=(3,3))
curve2 = p1.plot(data2, pen=(2,3))
ptr1 = 0

def update1():
    global data1, curve1, data2, ptr1

    data1[:-1] = data1[1:]  # shift data in the array one sample left
                            # (see also: np.roll)
    data1[-1] = np.random.normal()
    ptr1 += 1

    curve1.setData(data1)
    curve1.setPos(ptr1,0)



    data2[:-1] = data2[1:]  # shift data in the array one sample left
                            # (see also: np.roll)
    data2[-1] = np.random.normal()
    curve2.setData(data2)
    curve2.setPos(ptr1,0)


def update():
    update1()

timer = pg.QtCore.QTimer()
timer.timeout.connect(update)
timer.start(2000) # number of seconds (every 1000) for next update



if __name__ == '__main__':
    QtGui.QApplication.instance().exec_()

是否可以将该绘图嵌入到我的main.py文件中?如果我理解正确,我应该使用QTCreator上的升级小部件功能。提前谢谢各位

通过Qt Designer升级的是一个小部件,即一个类,因此不能直接升级,我们必须做的是将其放置在一个类中,如下所示:

绘图仪.py

class  CustomWidget(pg.GraphicsWindow):
    pg.setConfigOption('background', 'w')
    pg.setConfigOption('foreground', 'k')
    ptr1 = 0
    def __init__(self, parent=None, **kargs):
        pg.GraphicsWindow.__init__(self, **kargs)
        self.setParent(parent)
        self.setWindowTitle('pyqtgraph example: Scrolling Plots')
        p1 = self.addPlot(labels =  {'left':'Voltage', 'bottom':'Time'})
        self.data1 = np.random.normal(size=10)
        self.data2 = np.random.normal(size=10)
        self.curve1 = p1.plot(self.data1, pen=(3,3))
        self.curve2 = p1.plot(self.data2, pen=(2,3))

        timer = pg.QtCore.QTimer(self)
        timer.timeout.connect(self.update)
        timer.start(2000) # number of seconds (every 1000) for next update

    def update(self):
        self.data1[:-1] = self.data1[1:]  # shift data in the array one sample left
                            # (see also: np.roll)
        self.data1[-1] = np.random.normal()
        self.ptr1 += 1
        self.curve1.setData(self.data1)
        self.curve1.setPos(self.ptr1, 0)
        self.data2[:-1] = self.data2[1:]  # shift data in the array one sample left
                            # (see also: np.roll)
        self.data2[-1] = np.random.normal()
        self.curve2.setData(self.data2)
        self.curve2.setPos(self.ptr1,0)

if __name__ == '__main__':
    w = CustomWidget()
    w.show()
    QtGui.QApplication.instance().exec_()
在继续之前,我将假定文件具有以下结构:

.
├── main.py
└── Plotter.py
  • 首先要做的是选择小部件:
  • 然后,我们右键单击此项并选择升级到..的选项:
  • 在对话框中,我们将CustomWidget放置在提升的类名中,并将Plotter.h放置在头文件中,然后按添加提升按钮
  • 然后我们将.ui文件转换为.py

  • 通过Qt Designer升级的是一个小部件,即一个类,因此不能直接升级,我们必须做的是将其放置在一个类中,如下所示:

    绘图仪.py

    class  CustomWidget(pg.GraphicsWindow):
        pg.setConfigOption('background', 'w')
        pg.setConfigOption('foreground', 'k')
        ptr1 = 0
        def __init__(self, parent=None, **kargs):
            pg.GraphicsWindow.__init__(self, **kargs)
            self.setParent(parent)
            self.setWindowTitle('pyqtgraph example: Scrolling Plots')
            p1 = self.addPlot(labels =  {'left':'Voltage', 'bottom':'Time'})
            self.data1 = np.random.normal(size=10)
            self.data2 = np.random.normal(size=10)
            self.curve1 = p1.plot(self.data1, pen=(3,3))
            self.curve2 = p1.plot(self.data2, pen=(2,3))
    
            timer = pg.QtCore.QTimer(self)
            timer.timeout.connect(self.update)
            timer.start(2000) # number of seconds (every 1000) for next update
    
        def update(self):
            self.data1[:-1] = self.data1[1:]  # shift data in the array one sample left
                                # (see also: np.roll)
            self.data1[-1] = np.random.normal()
            self.ptr1 += 1
            self.curve1.setData(self.data1)
            self.curve1.setPos(self.ptr1, 0)
            self.data2[:-1] = self.data2[1:]  # shift data in the array one sample left
                                # (see also: np.roll)
            self.data2[-1] = np.random.normal()
            self.curve2.setData(self.data2)
            self.curve2.setPos(self.ptr1,0)
    
    if __name__ == '__main__':
        w = CustomWidget()
        w.show()
        QtGui.QApplication.instance().exec_()
    
    在继续之前,我将假定文件具有以下结构:

    .
    ├── main.py
    └── Plotter.py
    
  • 首先要做的是选择小部件:
  • 然后,我们右键单击此项并选择升级到..的选项:
  • 在对话框中,我们将CustomWidget放置在提升的类名中,并将Plotter.h放置在头文件中,然后按添加提升按钮
  • 然后我们将.ui文件转换为.py

  • 非常感谢,您的回答非常有用!我现在可以将我的绘图嵌入我在QTCreator中创建的UI中!我只是有几个额外的疑问,希望你能帮助我:1)在第三步中,你写道:“在对话框中,我们将CustomPlot放在提升的类名中”。如果我理解正确,名称应该是CustomWidget,因为我们应该将类的名称放在Plotter.py文件中,对吗?(这就是你在图片上写的,也许你把名字弄混了)2)最后。。。我最初想使用GraphicsView小部件,它是基于我读过的其他几个网站,包括一个你也回答过的网站(哈哈,我几分钟前才注意到你的名字!):我想了解他的情节和我的有什么不同,为什么你建议他实际使用GraphicsView?“在提升的类名中,您放置生成图形的类的名称,在我的示例中是CustomWidget,在头文件中,您将扩展名.py更改为.h–11分钟前,将文件名放置在头文件中“酷!这会让其他需要类似答案的人更清楚:)我不能向你发送聊天请求,因为我是新来的,如果我给你我的skype用户进行快速聊天,你可以吗?我来自墨西哥。太好了!非常感谢,朋友!非常感谢,你的回答非常有用!我现在可以将我的绘图嵌入我在QTCreator中创建的UI中!我只是有几个额外的疑问,希望你能帮助我:1)在第三步中,你写道:“在对话框中,我们将CustomPlot放在提升的类名中”。如果我理解正确,名称应该是CustomWidget,因为我们应该将类的名称放在Plotter.py文件中,对吗?(这就是你在图片上写的,也许你把名字弄混了)2)最后。。。我最初想使用GraphicsView小部件,它是基于我读过的其他几个网站,包括一个你也回答过的网站(哈哈,我几分钟前才注意到你的名字!):我想了解他的情节和我的有什么不同,为什么你建议他实际使用GraphicsView?“在提升的类名中,您放置生成图形的类的名称,在我的示例中是CustomWidget,在头文件中,您将扩展名.py更改为.h–11分钟前,将文件名放置在头文件中“酷!这会让其他需要类似答案的人更清楚:)我不能向你发送聊天请求,因为我是新来的,如果我给你我的skype用户进行快速聊天,你可以吗?我来自墨西哥。太好了!非常感谢,朋友!