クーの自由研究

マスターのかえるのクーは、弟子達の召喚術により新たな依り代を得てⅡ世として復活しました。

QT Designer にプラグインを入れて matplotlib を配置しよう

QT Designerを使おう!

かわるわよ!かえるのクーの助手の「井戸中 聖」(いとなか あきら)です。

このページの情報は(ページ存在自体が)実験の一環です。詳細は末尾参照ください。

QT Designerで matplotlib オブジェクトを使いたいとき、みなさんどうされていますか?

f:id:AssistantOfKoo:20201103214827j:plain 

(キューティーではなくキュートです)

matplotlib であれば、python 2.x系であればQT Designerのプラグインがいろいろあったとおもいますが、3.x系になってからはあまりみかけません。(たぶん知らないだけ:そもそも、昔標準でメニューになかったでしたっけ?入れたのを忘れただけ??それとも記憶違い???)

QTは比較的使う方ですが、何台もPCを持っており、必要な環境はその都度作るために、qtまたはQT Designerでmatplotlibを扱う方法はその都度ネット検索しています。

日本語の情報が少ないので、自分の備忘録を兼ねて書きますね。

(2022/03追記)

QT DesignerはWindowsであればAnacondaのどこかのフォルダに(たとえばLib/binの中かも)designer.exe がありますので、それを起動します。結構古いビルドが古まれているかもしれません。新しいのが欲しければ、QTの本家SDKをインストールしてQT Creatorを使うのがよいかもしれません

直接designerでmatplotlibを扱うには

f:id:AssistantOfKoo:20201103215057p:plain (matplotlibご本家はこちら)

プラグインを入れよう!

プラグインの情報は以下のサイトなどにあります。モトネタはpython(x, y)のようなのですが、python3系/最新QT Designerで問題なく使えます。(もしくはブランチして改版されてる?)

以下のサイトにある短いpythonソース(2ファイル)を所定のフォルダにいれ、環境変数PYQTDESIGNERPATH 環境変数を設定すればOKです。(とりあえるWindowsでやってみました):ファイル名はまちがえずに!!(pluginは下のサイトからゲットだぜ!)

※(追記)こちらは望ましくないサイトになったようです。アクセスしないでください。

または

※(追記)こちらは消失したようです。残念

からpythonファイルを作成してください。(2ファイル必要)

※(追記)転載になってしまいますが、正規の場所がわからないため、下にはります。ダメだったらごめんなさい。


matplotlibwidget.py

from PyQt5.QtCore import QSize
from PyQt5.QtWidgets import QSizePolicy
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as Canvas
from matplotlib.figure import Figure
from matplotlib import rcParams

rcParams['font.size'] = 9


class MatplotlibWidget(Canvas):
    def __init__(self, parent=None, title='', xlabel='', ylabel='',
                 xlim=None, ylim=None, xscale='linear', yscale='linear',
                 width=4, height=3, dpi=100):
        self.figure = Figure(figsize=(width, height), dpi=dpi)
        self.axes = self.figure.add_subplot(111)
        self.axes.set_title(title)
        self.axes.set_xlabel(xlabel)
        self.axes.set_ylabel(ylabel)
        if xscale is not None:
            self.axes.set_xscale(xscale)
        if yscale is not None:
            self.axes.set_yscale(yscale)
        if xlim is not None:
            self.axes.set_xlim(*xlim)
        if ylim is not None:
            self.axes.set_ylim(*ylim)

        super(MatplotlibWidget, self).__init__(self.figure)
        self.setParent(parent)
        super(MatplotlibWidget, self).setSizePolicy(
            QSizePolicy.Expanding, QSizePolicy.Expanding)
        super(MatplotlibWidget, self).updateGeometry()

    def sizeHint(self):
        return QSize(*self.get_width_height())

    def minimumSizeHint(self):
        return QSize(10, 10)


matplotlibplugin.py

import os
from PyQt5.QtGui import QIcon
from PyQt5.QtDesigner import QPyDesignerCustomWidgetPlugin
from matplotlib import rcParams
from matplotlibwidget import MatplotlibWidget

rcParams['font.size'] = 9


class MatplotlibPlugin(QPyDesignerCustomWidgetPlugin):
    def __init__(self, parent=None):
        super(MatplotlibPlugin, self).__init__(parent)
        self._initialized = False

    def initialize(self, editor):
        self._initialized = True

    def isInitialized(self):
        return self._initialized

    def createWidget(self, parent):
        return MatplotlibWidget(parent)

    def name(self):
        return 'MatplotlibWidget'

    def group(self):
        return 'PyQt'

    def icon(self):
        return QIcon(os.path.join(
            rcParams['datapath'], 'images', 'matplotlib.png'))

    def toolTip(self):
        return ''

    def whatsThis(self):
        return ''

    def isContainer(self):
        return False

    def domXml(self):
        return '<widget class="MatplotlibWidget" name="mplwidget">\n' \
               '</widget>\n'

    def includeFile(self):
        return 'matplotlibwidget'

 


そして、説明にあるように環境変数を設定します。

f:id:AssistantOfKoo:20201103192847p:plain

DT Designerを再起動するとMatplotlibWidgetが出てきました!!

f:id:AssistantOfKoo:20201103192647p:plain

他のオブジェクトと同様にドラッグ&ドロップして配置できます!!

f:id:AssistantOfKoo:20201103192731p:plain

あとは張り付けたオブジェクトに対して、メインのプログラムであれこれいつものmatplotlibの設定するだけでOKです。

超便利です。 だってなんだか、だってだってなんだもん!!

では楽しい QTライフをお過ごしください

実は以下がこのページの主役です!(12歳未満のお友達はもうすこしおおきくなってから見てね)倖田來未様は「一流」のアーチストです!

(よいこのお友達、またはpythonが嫌いな人はかわりにこちら↓を見てね!!)

 

pyqtgraph編は以下をご覧ください。

 おたまじゃくしのしっぽ:どこかでみたような

このページはGoogleサーチコンソールでのクロール要求が現在休止中のための実験です。(ページの被クロールの実験です。)

助手ページのこのページと同じ情報が『正常にクロールしてもらえない(おそらくはメイン表題情報が認識してもらえなかった)現象』がこのサイトでも発生するかどうかの確認をするためのものです。 Googleがクロールプログラム/もしくはポリシーの大規模調整中であるための現象だとは思われますが、同様の現象が発生するかどうかの確認のためのページです。そのため、開始部はほとんど同じにしています。(クロールは最初の出だし重視の傾向があるため)

このページの内容は助手ページに記載と同一なので、クロール実験以外の存在意義はありません。あしからず。

ちなみにBing系では問題なく拾って(クロールして)もらえてます。

さて、このページの結果がでるまで2~3日かかると思うので、一旦わすれて宿題の再測定をします。

1時間もたたずに結果がでました!!早。

このページは問題なくクロールされました。とすれば、問題なのは助手ページの構成かなぁ。。被クロール時期(相性が悪いバージョンのクローラにクロールされた?)の問題かなぁ。。。「qt designer matplotlib」で検索!

ではお休みなさい。今日もすてきなナイトメアがみれますように。

(11/15 夜:娘がはるまきごはんのライブ配信チケットを購入し、テレビでネット視聴中。良い時代になったものです。)

(11/21さらに補足)

表題をかえて数日たつと、トップページにでていた検索がグーグル検索できなくなりました。グーグルに登録されてからの「表題」変更は現在一定のペナルティのような状況になるの「かも」しれません。

サーチコンソール機能の再クロール要求が再開されたら、改めて申請してみようと思います。