lianback 2020-01-09
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()