pyqtgraph에widget 추가 및 제어
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]
Reference
이 문제에 관하여(pyqtgraph에widget 추가 및 제어), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takizawa044/items/069fc86f161330b348db
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(pyqtgraph에widget 추가 및 제어), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takizawa044/items/069fc86f161330b348db텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)