zoukankan      html  css  js  c++  java
  • 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()
    
    
  • 相关阅读:
    hosts.deny hosts.allow防止ssh暴力破解密码
    linux查看当前ssh登陆的ip
    ubuntu下如何查看用户登录及系统授权相关信息
    ubuntu查看日志中访问次数前十的ip
    magento清空日志表
    mysql general error 2006
    mysql 1205 lock wait timeout exceeded
    mysql 504 timeout问题
    PHP : 数据库中int类型保存时间并通过年月份时分秒进行显示
    PHP : 封装Mysqli的连接、关闭和增改查(面向过程)
  • 原文地址:https://www.cnblogs.com/milesma/p/12170838.html
Copyright © 2011-2022 走看看