PyQt6で作成したGUIにPyQtGraphで作成されたグラフを表示する
こんにちは
久しぶりの投稿になります
pysimpleGUIのライセンス形態が変更になったことで、pyQtでGUIを作成するようになりました。
pyQtの勉強をするのであれば、いっそのこと遅いといわれているmatplotlibによるグラフ描画出なく、
少しは?早いと言われているpyqtGraphでグラフを描画することにしました。
その際、GUIの作成はWeb上の情報ですぐに実装できるようになったのですが、
部品を並べたGUI上に目的のグラフを描画することがなかなかできず、
GUIとは別に新しいウィンドウが作成されそれに描画される状態がつづきました。
このたび、やっと解決したので、コードを備忘録かねてお知らせいたします。
import sys
import numpy as np
from PyQt6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QSlider
from PyQt6.QtCore import Qt
import pyqtgraph as pg
class HistogramWidget(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(100, 100, 800, 600)
layout = QVBoxLayout(self)
# pyqtgraphのプロットウィジェットを追加
self.plot_widget = pg.PlotWidget()
layout.addWidget(self.plot_widget)
# スライダーを追加
self.slider = QSlider(Qt.Orientation.Horizontal)
self.slider.setMinimum(10)
self.slider.setMaximum(100)
self.slider.setValue(10)
self.slider.valueChanged.connect(self.on_slider_change)
layout.addWidget(self.slider)
self.on_slider_change() # 初期表示のために呼び出す
def on_slider_change(self):
bins = self.slider.value()
data = np.random.normal(size=1000)
hist = np.histogram(data, bins=bins)
pData = hist[0]
left = hist[1][:-1]
self.plot_widget.clear()
bargraph = pg.BarGraphItem(x=left, height=pData, width=(left[1] - left[0]), brush='b')
self.plot_widget.addItem(bargraph)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('Histogram with Slider')
self.setGeometry(100, 100, 800, 600)
self.main_widget = HistogramWidget()
self.setCentralWidget(self.main_widget)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
最近のコメント