概述
方案 : 在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,随着窗口界面尺寸改变,图像也改变的解决方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复