PyQt5和matplotlib簡單結合的實例


demo

code

import sys
import matplotlib.pyplot as plt
import numpy as np
from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout, QPushButton
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FC


class MyWidget(QWidget):
    def __init__(self):
        super(MyWidget, self).__init__()
        self.init_ui()

    def init_ui(self):
        self.resize(1000, 500)

        # 解決無法顯示中文
        plt.rcParams['font.sans-serif'] = ['SimHei']
        # 解決無法顯示負號
        plt.rcParams['axes.unicode_minus'] = False
        # 按鈕
        self.one_btn = QPushButton('畫一條線')
        self.more_btn = QPushButton('重復畫線')
        self.reset_btn = QPushButton('重置')
        # 按鈕綁定方法
        self.one_btn.clicked.connect(self.draw_cmd)
        self.more_btn.clicked.connect(self.draw_cmd)
        self.reset_btn.clicked.connect(self.reset_cmd)
        # 設置畫布部分
        self.fig = plt.figure(figsize=(10, 4), dpi=80)
        self.canvas = FC(self.fig)
        # 添加第一個圖
        self.ax = self.fig.add_subplot('121')
        self.ax.set_title('畫一條線')
        # 添加第二個圖
        self.ax1 = self.fig.add_subplot('122')
        self.ax1.set_title('重復畫線')
        # 設置布局,將組件添加到布局中
        self.layout = QVBoxLayout()

        self.layout.addWidget(self.canvas)
        self.layout.addWidget(self.one_btn)
        self.layout.addWidget(self.more_btn)
        self.layout.addWidget(self.reset_btn)

        self.setLayout(self.layout)

    def draw_cmd(self):
        try:
            # 如果是點擊畫一條線的按鈕,就先清除內容
            if self.sender() == self.one_btn:
                ax = self.ax
                ax.cla()
                self.ax.set_title('畫一條線')
            # 如果是點擊重復畫圖的按鈕,就不清除原先的內容
            elif self.sender() == self.more_btn:
                ax = self.ax1
            # 繪圖部分
            x = [i + 1 for i in range(5)]  # x軸
            y = np.random.randint(0, 10, 5)  # y軸
            ax.plot(x, y)  # 折線圖
            self.canvas.draw()  # 繪制
        except Exception as e:
            print(e)

    def reset_cmd(self):
        try:
            # 清除內容
            self.ax.cla()
            self.ax1.cla()
            # 重新設置標題
            self.ax.set_title('畫一條線')
            self.ax1.set_title('重復畫線')
            # 重新繪制
            self.canvas.draw()
        except Exception as e:
            print(e)


def start():
    app = QApplication(sys.argv)
    m = MyWidget()
    m.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    start()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM