PyQt5結(jié)合matplotlib繪圖的實現(xiàn)示例
參考網(wǎng)上的例子,實現(xiàn)了簡單的matplotlib pyqt5繪圖
相關(guān)知識點:
(1)pyqt5中添加控件要在布局中添加
(2)布局可以使用replaceWidget替換控件
(3)信號與槽機制
timer = QtCore.QTimer(self) timer.timeout.connect(self.update_figure) self.btnPlot.clicked.connect(self.plotButton_callback)
實現(xiàn)的效果

import sys
from PyQt5 import QtCore, QtGui, uic
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QMessageBox, QVBoxLayout, QSizePolicy, QWidget
from PyQt5.QtGui import QIcon
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
import numpy as np
qtCreatorFile = "matplotlib_ui.ui"
# 使用uic加載
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
class MyMplCanvas(FigureCanvas):
"""這是一個窗口部件,即QWidget(當然也是FigureCanvasAgg)"""
def __init__(self, parent=None, width=5, height=4, dpi=100):
fig = Figure(figsize=(width, height), dpi=dpi)
self.axes = fig.add_subplot(111)
# 每次plot()調(diào)用的時候,我們希望原來的坐標軸被清除(所以False)
self.axes.hold(False)
self.axes.grid('on')
self.compute_initial_figure()
#
FigureCanvas.__init__(self, fig)
self.setParent(parent)
FigureCanvas.setSizePolicy(self,
QSizePolicy.Expanding,
QSizePolicy.Expanding)
FigureCanvas.updateGeometry(self)
def compute_initial_figure(self):
pass
class MyStaticMplCanvas(MyMplCanvas):
"""靜態(tài)畫布:一條正弦線"""
def compute_initial_figure(self):
t = np.arange(0.0, 3.0, 0.01)
s = np.sin(2 * np.pi * t)
self.axes.grid('on')
self.axes.plot(t, s)
class MyDynamicMplCanvas(MyMplCanvas):
"""動態(tài)畫布:每秒自動更新,更換一條折線。"""
def __init__(self, *args, **kwargs):
MyMplCanvas.__init__(self, *args, **kwargs)
timer = QtCore.QTimer(self)
timer.timeout.connect(self.update_figure)
timer.start(1000)
def compute_initial_figure(self):
self.axes.grid('on')
self.axes.plot([0, 1, 2, 3], [1, 2, 0, 4], 'r')
def update_figure(self):
# 構(gòu)建4個隨機整數(shù),位于閉區(qū)間[0, 10]
l = [np.random.randint(0, 10) for i in range(4)]
self.axes.grid('on')
self.axes.plot([0, 1, 2, 3], l, 'r')
self.draw()
class MyApp(QMainWindow, Ui_MainWindow):
def __init__(self):
QMainWindow.__init__(self)
Ui_MainWindow.__init__(self)
super().__init__()
self.initUI()
self.initBtn()
self.initFrame()
def initFrame(self):
self.main_widget = self.frame
self.layout = QVBoxLayout(self.main_widget)
self.f = MyMplCanvas(self.main_widget)
self.layout.addWidget(self.f)
def initUI(self):
self.setupUi(self)
self.setWindowTitle("PyQt5結(jié)合Matplotlib繪圖")
self.setWindowIcon(QIcon("rocket.ico")) # 設(shè)置圖標,linux下只有任務(wù)欄會顯示圖標
self.show()
def initBtn(self):
self.btnPlot.clicked.connect(self.plotButton_callback)
self.btnPlot.setToolTip("Button")
def plotButton_callback(self):
self.drawFrame()
def drawFrame(self):
sc = MyStaticMplCanvas(self.main_widget, width=5, height=4, dpi=100)
dc = MyDynamicMplCanvas(self.f, width=5, height=4, dpi=100)
self.layout.addWidget(sc)
self.layout.replaceWidget(self.f,dc) # 替換控件
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec_())
參考鏈接:https://www.cnblogs.com/hhh5460/p/4322652.html
到此這篇關(guān)于PyQt5結(jié)合matplotlib繪圖的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)PyQt5結(jié)合matplotlib內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實現(xiàn)基于SVM手寫數(shù)字識別功能
這篇文章主要為大家詳細介紹了python實現(xiàn)基于SVM手寫數(shù)字識別功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01
python去除字符串中的空格、特殊字符和指定字符的三種方法
本文主要介紹了python去除字符串中的空格、特殊字符和指定字符的三種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02
實例講解Python爬取網(wǎng)頁數(shù)據(jù)
這篇文章給大家通過實例講解了Python爬取網(wǎng)頁數(shù)據(jù)的步驟以及操作過程,有興趣的朋友跟著學習下吧。2018-07-07
詳解NumPy中的線性關(guān)系與數(shù)據(jù)修剪壓縮
本文將通過股票均線計算的案例來為大家講解一下NumPy中的線性關(guān)系以及數(shù)據(jù)修剪壓縮的實現(xiàn),文中的示例代碼講解詳細,感興趣的可以了解一下2022-05-05
Django ORM 聚合查詢和分組查詢實現(xiàn)詳解
這篇文章主要介紹了Django ORM 聚合查詢和分組查詢實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-08-08

