pyqtgraph에widget 추가 및 제어

17641 단어 Python3PyQtGraphPyQt5

1. 소개


나는pyqt와pyqtgraph의 초보자다.측정 데이터를 고속으로 표시하려면pyqtgraph를 사용하여 고속 디스플레이를 실현했습니다.이후 디스플레이 매개 변수 등을 변경하려는 요구가 있었지만 다양한 도표와 작은 부품의 예가 있어도 조합된 예는 찾지 못해 조사를 많이 한 후에야 깨달았다.나는 다른 사람에게도 도움이 되고 싶어서 투고했다.

2. 요점


(자신은 방법을 몰라 실험을 반복하는 곳)

• 작은 부품을 그래픽 항목으로 추가


단추 등 작은 위젯을pyqtgraph 창에 추가하면 되지만 다음과 같은 방법으로 실행합니다.
・QGraphicsProxyWidget[PyQt5.QtWidgets]
작은 위젯을 캡처 항목으로 표시합니다.
・addItem[class pyqtgraph.PlotItem]
뷰 상자에 그래픽 항목이 추가되었습니다.
・addLayout[class pyqtgraph.GraphicsLayou]
pyqtgraph 창에 그래픽 레이아웃을 추가합니다.

・ 하위 창을 생성할 때 부모 창을 전달하는 객체


QMainWindow를 통해 하위 창을 만들고 초기화할 때 부모 창의 대상을 전달합니다(이하 샘플의 경우 win).
test.py
class SubWindow(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.initUI()
   .............................

3. 예제 코드


・ 드로잉 기능을 통해 랜덤 값의 포인트를 늘리면서 업데이트를 계속합니다.
· 창 밑에 있는 레이아웃은test1,test2,exit 세 개의 단추를 도형 항목으로 표시합니다.각 단추를 누르면 명령줄에 단추 이름을 표시합니다
다음 작업을 수행합니다.
테스트 1: 추가 비헤이비어 없음
test2: 하위 창을 열고 ClearPTR 버튼을 눌러 디스플레이 드로잉을 초기화합니다.
exit: 업데이트를 완료하고 메인 창을 닫습니다 (만).
메인 창

TEST2 시 보조 날개 누르기

test.py
import sys
from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication, QGraphicsProxyWidget
from pyqtgraph.Qt import QtGui, QtCore
import pyqtgraph as pg
import numpy as np

class SubWindow(QMainWindow):
    def __init__(self, parent):
        super().__init__(parent)
        self.initUI()
    def initUI(self):
        btn1 = QPushButton("Button01", self)
        btn1.clicked.connect(self.button01Clicked)
        btn1.move(27, 15)
        btn2 = QPushButton("Clear PTR", self)
        btn2.clicked.connect(self.Cbutton01Clicked)
        btn2.move(27, 50)
        self.statusBar()
        self.setWindowTitle('TEST2 Window')
        self.resize(300,200)
        self.show()
    def button01Clicked(self):
        sender = self.sender()
        self.statusBar().showMessage(sender.text() + ' Push Button01')
    def Cbutton01Clicked(self):
        global ptr
        sender = self.sender()
        self.statusBar().showMessage(sender.text() + ' Clear Points')
        ptr = 0

class button :
    def __init__(self, win):
        self.win = win
        self.p = self.win.addLayout(row=1, col=0)
        self.list = {}
    def add(self, name, func) :
        proxy = QGraphicsProxyWidget()
        item = self.p.addItem(proxy, row=0, col=len(self.list))
        QPB = QtGui.QPushButton(name)
        QPB.clicked.connect(func)
        proxy.setWidget(QPB)
        self.list[name]=[proxy, item, QPB]
    def b_exit(self) :
        print("ckick exit")
        timer.stop()
        self.win.close()
    def b_test1(self) :
        print("ckick TEST1")
    def b_test2(self) :
        print("ckick TEST2")
        sw = SubWindow(self.win)

app = QtGui.QApplication([])

win = pg.GraphicsWindow(title="test")
win.resize(1000,600)
win.setWindowTitle("Test Window")
pg.setConfigOptions(antialias=True)
p6 = win.addPlot(Title="wave")

b = button(win)
b.add("test1", b.b_test1)
b.add("test2", b.b_test2)
b.add("exit",  b.b_exit)

curve = p6.plot(pen=None,symbol='o' )
ptr = 0
def update() :
    global curve, ptr, p6
    x = np.random.normal(size=ptr+1)
    y = np.random.normal(size=ptr+1)
    curve.setData(x,y)
    p6.enableAutoRange('xy', False)
    ptr += 1

timer = QtCore.QTimer()
timer.timeout.connect(update)
timer.start(50)

sys.exit(app.exec_())

4. 끝


아래의 참고 문헌을 바탕으로 외관을 조합하여 만들었기 때문에 원래의 작법과 다른 점이 있을 수 있다.지적해 주시면 큰 도움이 될 거예요.
작업 환경:
· 윈도우즈 10에python3.6,pyqtgraph,pyqt5를 설치하고 사용합니다.
참고 문헌:
The complete PyQt5 tutorial — Start building GUI apps with Python
Add button to PyQtGraph Layout
Welcome to the documentation for pyqtgraph
PyQt5 및python3 기반 GUI 프로그래밍[1]

좋은 웹페이지 즐겨찾기