以下は、Qt Designer用のMatplotlibPluginのPyQt5バージョンです。
これを使用するには、PYQTDESIGNERPATH
環境変数に含まれるディレクトリ、またはdirectories that Qt Designer searches for its own pluginsのいずれかの "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'
利用可能かどうか、そのようなプラグインがある場合、私は考えています。しかし、通常、あなたはそれを必要としません。あなたはちょうどあなたのGUIにいくつかのスペースを残し、コードを介してmatplotlibキャンバス(これはQWidgetです)を追加します。 – ImportanceOfBeingErnest
[この質問](https://stackoverflow.com/questions/46391356/embed-a-matplotlib-graphic-into-a-widget-pyqt5)には、いくつかのUIデザイナーを介して作成された部分と、アプリケーションを実行するコード。前者は操作しませんが、後者にウィジェットを追加します。 – ImportanceOfBeingErnest
プロンプトの返信をありがとう。確かに、これはわずかな余分な作業でこのように動作します。誰かが魔法のqtdesignerプラグインについて知っていない限り、私はその道を行くでしょう。 – Thib