. Pyqtgraphを用いたアプリケーション開発(はじめの一歩) – びえびえ s Personal webpage
Pyqtgraphを用いたアプリケーション開発(はじめの一歩) – びえびえ s Personal webpage
Pyqtgraphを用いたアプリケーション開発(はじめの一歩) – びえびえ s Personal webpage

pyqtgraphを用いたアプリケーション開発(はじめの一歩)

少し前のpyqtgraphは本当にグラフ描画中心で、周辺のボタンとかテーブルとかはpyqtと混ぜて使用する例が多くあったかと記憶していますが、最新のバージョンではそんなこともなくて、 結構な数のQtWidgetが使えるようにAPIが生えていますね。 私は今回はボタンとテキストボックス、そしてテーブルくらいがあれば十分だったので、それだったらあえてpyqtを混ぜなくてもpyqtgraphの中である程度閉じて書けるようになってきています。ところが、 インターネット上でもサンプル例が多くないので、どのように書くのが一番楽かというのが分かりづらいのが難点ですね。 テーブルとグラフ描画のみを作りたいですって場合はこんな感じで行けそうです。

def Setup_Window(): win = pg.LayoutWidget() # 親ウインドウはこれ graph = pg.GraphicsLayoutWidget() # グラフを格納するレイアウトマネージャはこれ table = pg.TableWidget() # テーブルウィジェットを作る table.setData([["会社A", "2000", "4000"],["会社B", "1200", "60"]]) table.resizeRowsToContents() win.addWidget(table, row = 0, col = 0) # テーブルを上1行に win.addWidget(graph, row = 1, col = 0) # グラフを下1行に配置 x = np.arange(1000) y = np.random.normal(size=(3, 1000)) for i in range(3): graph.addPlot(title = "データ" + str(i), x = x, y = y[i], pen=(i,3)) # 適当なデータでグラフ3つこしらえてみた return win if __name__ == '__main__': app = pg.mkQApp() win = Setup_Window() win.show() app.exec_()

適当に組んでもこれくらいには・・・

ドキュメントは貧相とは言わないが・・・初学者向きにはできていません

ドキュメントは結構ちゃんと書かれている方だとは思いますが、 python + Qtアプリケーションとしてどのように完結させればちゃんとしたアプリケーションになるのか、という点はあまり書かれておりません。 インタラクティブシェル上で1行ずつ打ち込んでいって、ほらグラフプロットできたでしょ?というようなチュートリアルになっているイメージですね。そのため、グラフ以外にもウィジェット生成や操作に関するAPIが生えているけれど、果たしてどう使うんだろう?というのが初学者にはぱっとは分からない、というのが現状ですね。とりあえず気にすることとしては、

  • QApplicationクラスのオブジェクトを作成するには pyqtgraph.mkQApp()メソッドを呼ぶ。 これをしていないと、残りのQWidgetを作ろうとしたときエラーになります。pyqt5と無理矢理混ぜると訳が分からなくなるので、素直にmkQAppを呼んだ方がよろしいかと思います。
  • ウィンドウ側のイベントハンドラに移るためには QApplicationクラスのオブジェクトにてexec_()メソッドを読んで終わる。 こうするとウィンドウが閉じたときにアプリケーションが正常に終わることができます。ここはQapplicationオブジェクトを取れさえすればpyqt5と変わりありません。
  • QWidgetクラスのウィジェットを入れるウィンドウやレイアウトマネージャを作成したいなら、pyqtgraph.LayoutWidget()メソッドを呼ぶ必要がある。これに対して、グラフや画像など、グラフィック関連のものを入れるウィンドウやレイアウトマネージャを作成したい場合はpyqtgraph.GraphicLayoutWidget()メソッドを呼ぶ。厳密なことを言えばQtウィジェットのクラス階層を知っておく必要がありますが、画面部品としてのウィジェットであるQWidgetとグラフ等のグラフィック関連のQGraphicsViewとは別物であって、それらを整形表示するためのレイアウトも分かれています。さらに pyqtgraphのAPIでは、LayoutWidgetメソッド・GraphicsLayoutWidgetメソッドが単体で呼ばれた場合はそのまま親ウィンドウになれます (し、別のウィンドウの中にレイアウトマネージャとして押し込めることもできます)。・・・というところが分かりにくい!のですが、そういう作りなんだから仕方がないですね。

こんな感じで

コメントを残す コメントをキャンセル 最近の投稿
  • STMシリーズを初めて使ってみた
  • ホルンを習っています
  • 「トランジスタ技術」2023年5月号
  • ラプラス変換
  • UWP向けOxyPlotについて
📎📎📎📎📎📎📎📎📎📎