我是靠谱客的博主 专一诺言,最近开发中收集的这篇文章主要介绍PyQt中嵌入matplotlib,随着窗口界面尺寸改变,图像也改变的解决方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

方案 : 在PyQt控件中重写resizeEvent方法——针对PyQt方法,同时在resizeEvent中重写Figure类的resize方法。

视频演示链接 : PyQt中嵌入matplotlib,随着窗口界面尺寸改变,图像也改变的解决方法——演示_哔哩哔哩_bilibili

 

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import matplotlib
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg
from matplotlib.figure import Figure

import numpy
matplotlib.use("Qt5Agg")  # 声明使用QT5
import sys

class APP(QMainWindow):
    def __init__(self):
        super(APP, self).__init__()
        self.setWindowTitle("数据分析")
        self.setMinimumSize(800, 600)

        self.group2 = QGroupBox(self)
        self.group2_w_h = 595

        self.setUI()
    def setUI(self):

        self.group2.setGeometry(QRect(0, 0, self.group2_w_h, self.group2_w_h))
        self.group2.setTitle('可视化')
        font = QFont()
        font.setFamily('隶书')
        font.setPixelSize(24)
        font.setWeight(50)
        qss = """
            border-radius : 5px;
            border : 5px solid tan;
        """

        self.group2.setFont(font)

        self.group2.setStyleSheet(qss)

    # 调用画图
    def draw(self, width=5, height=4, dpi=100):

        self.Fig = DrawFigure(width, height, dpi)

        # fig1
        axes = self.Fig.fig.add_subplot(121)
        data1 = numpy.arange(0.0, 5.0, 0.01)
        data2 = numpy.cos(2 * numpy.pi * data1)
        axes.plot(data1, data2)

        # fig2
        bar = self.Fig.fig.add_subplot(122)
        height = numpy.arange(1, 13)
        x_title = [
            'Python', "Java", "JavaScript", "R", "Go", "Dart",
            "C", "C++", "C#", "Swift", 'Rust', "Shell"
        ]
        bar : matplotlib.figure.Axes
        bar.bar(x=x_title, height=height, width=0.5)
        bar.set_xticklabels(labels=x_title, rotation=70)

        self.Fig.fig.suptitle("Draw")
        QGridLayout(self.group2).addWidget(self.Fig)


    def resizeEvent(self, a0 : QResizeEvent):
        # 改变窗口大小后的新尺寸
        new_h, new_w = a0.size().height(), a0.size().width()
        new_change_w, new_change_h = new_w / 800, new_h / 600
        self.group2.setGeometry(
            0, 0, int(self.group2_w_h * new_change_w), int(self.group2_w_h * new_change_h)
        )
        self.Fig.resize(int(self.group2_w_h * new_change_w), int(self.group2_w_h * new_change_h))


# 画图类
class DrawFigure(FigureCanvasQTAgg):
    def __init__(self, width=5, height=4, dpi=100):
        # 创建Figure
        self.fig = Figure(figsize=(width, height), dpi=dpi)
        # 此句必不可少,否则不能显示图形
        super(MyFigure, self).__init__(self.fig)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ui = APP()
    ui.draw()
    ui.show()

    sys.exit(app.exec_())

 

最后

以上就是专一诺言为你收集整理的PyQt中嵌入matplotlib,随着窗口界面尺寸改变,图像也改变的解决方法的全部内容,希望文章能够帮你解决PyQt中嵌入matplotlib,随着窗口界面尺寸改变,图像也改变的解决方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(75)

评论列表共有 0 条评论

立即
投稿
返回
顶部