python3 PyQt5 实现在GUI界面中点击按钮,进行重新绘图

环境:Python 3.8.5
最终效果:点击下面的PushButton,可以实现重新绘制一幅图。图在一个GroupBox中,该GroupBox放在哪里,图就会装在它里面,从而可以实现指定位置重新画图的功能。
在这里插入图片描述
在这里插入图片描述

下面是主文件的源码,源码并不复杂,该工程是在链接1链接2的基础上修改得到的,就只当做一个简单demo吧,读者可以根据这个程序思路进行修改,比如实现点击按钮,或者定时来重新绘制自己后台中的数据。完整的工程我已传到了GitHub,需要的同学可以去取哦。

from Ui_DataDisplayUI import Ui_MainWindow
from PyQt5.QtWidgets import QApplication, QMainWindow, QGridLayout
import sys
import numpy as np

from mpl_toolkits.mplot3d import Axes3D
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
from matplotlib.lines import Line2D


class Figure_Canvas(FigureCanvas):
    def __init__(self, parent=None, width=3.9, height=2.7, dpi=100):
        self.fig = Figure(figsize=(width, height), dpi=dpi)
        super(Figure_Canvas, self).__init__(self.fig)
        self.ax = self.fig.add_subplot(111)


class ImgDisp(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(ImgDisp, self).__init__(parent)
        self.setupUi(self)
        self.Init_Widgets()
        self.pushButton.clicked.connect(
            self.updatePlot)
        self.pushButtonClickedTimes = 1

    def Init_Widgets(self):
        self.PrepareSamples()
        self.PrepareLineCanvas()

    def PrepareSamples(self):
        self.x = np.arange(-4, 4, 0.02)
        self.y = np.sin(self.x)

    def PrepareLineCanvas(self):
        self.LineFigure = Figure_Canvas()
        self.LineFigureLayout = QGridLayout(self.LineDisplayGB)
        self.LineFigureLayout.addWidget(self.LineFigure)
        # self.LineFigure.ax.set_xlim(-4, 4)
        # self.LineFigure.ax.set_ylim(-1, 1)
        self.line = Line2D(self.x, self.y)
        self.LineFigure.ax.add_line(self.line)
        self.LineFigure.ax.autoscale_view()

    def updatePlot(self):
        self.LineFigure.ax.cla()
        self.x = np.arange(0, 10*self.pushButtonClickedTimes, 1)
        self.y = np.sin(self.x) * self.pushButtonClickedTimes
        self.LineFigure.ax.set_xlabel('x')
        self.LineFigure.ax.set_ylabel('y')
        # self.LineFigure.ax.plot(self.x, self.y) # This is same as the two line behind
        self.line = Line2D(self.x, self.y)
        self.LineFigure.ax.add_line(self.line)

        self.LineFigure.ax.autoscale_view()  # must lies behind add_line()
        self.LineFigure.draw()
        self.pushButtonClickedTimes += 1


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ui = ImgDisp()
    ui.show()
    sys.exit(app.exec_())

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值