gpt4 book ai didi

python - Qt5 Matplotlib Designer 插件

转载 作者:太空宇宙 更新时间:2023-11-04 00:26:09 25 4
gpt4 key购买 nike

我正在使用 Python 3.6 和 PyQt-5.9.1 以及 Qt Designer 进行 UI 设计,我需要包含一些 matplotlib 图。

经过一些挖掘,我发现为了不在每次更新 gui 部分时修改从 ui 文件生成的 python 代码(这是 Qt Designer 所期望的),我需要一个 MatplotlibWidget 插件设置在 Qt 设计器中。

我的问题是,我为这个插件找到的引用来自基于 Python 2.7 的 Python(x,y) 包,不适用于 Python 3.x;或在 Python 3.x/Qt5 环境中不工作的 PyQtdesginerplugins 包(已在这个问题中指出 How do I add matplotlib plugin to Qt5.4 Designer plugins? )。

是否有可能在我的 Python 3.6 和 Qt5 环境中将 MatplotlibWidget 添加到 Qt Designer?这将有助于充分利用 Qt Designer 将 UI 与应用程序逻辑分离。

最佳答案

您将在下面找到适用于 Qt Designer 的 MatplotlibPlugin 的 PyQt5 版本。

要使用它,请将这两个文件放在 PYQTDESIGNERPATH 环境变量中包含的目录中,或者放在 directories that Qt Designer searches for its own plugins 之一的“python”子目录中.这两个文件的命名必须完全如下所示。

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'

关于python - Qt5 Matplotlib Designer 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47364804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com