from PyQt5.QtWidgets import QDialog, QGridLayout, QApplication from matplotlib.figure import Figure from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.backends.backend_qt5 import NavigationToolbar2QT from PyQt5.QtCore import Qt class MyFigureCanvas(FigureCanvas): def __init__(self, parent=None): self.figure = Figure() super(MyFigureCanvas, self).__init__(self.figure) self.setParent(parent) class ChartDialog(QDialog): def __init__(self, data=None, title="Line Chart", xlabel="X", ylabel="Y", parent=None): super(ChartDialog, self).__init__(parent) self.setWindowFlags(Qt.Window) self.data = data if data is not None else (range(2, 26, 2), [15, 13, 14.5, 17, 20, 25, 26, 26, 27, 22, 18, 15]) self.title = title self.xlabel = xlabel self.ylabel = ylabel self.initUI() def initUI(self): self.setWindowTitle(self.title) # 确保标题被设置 layout = QGridLayout() self.figureCanvas = MyFigureCanvas(self) self.draw_figure() self.navigationToolbar = NavigationToolbar2QT(self.figureCanvas, self) layout.addWidget(self.navigationToolbar, 0, 0, 1, 1) layout.addWidget(self.figureCanvas, 1, 0, 1, 1) self.setLayout(layout) #self.setGeometry(300, 300, 600, 400) def draw_figure(self): self.figureCanvas.figure.clear() # 清除整个 Figure self.axes = self.figureCanvas.figure.add_subplot(111) # 添加新的 Axes self.axes.set_title(self.title) self.axes.set_xlabel(self.xlabel) self.axes.set_ylabel(self.ylabel) x, y = self.data self.axes.plot(x, y, color='red') self.figureCanvas.figure.canvas.draw_idle() # 更新画布上的绘图 def tans_data(self,data): self.data = data def main(): app = QApplication([]) dialog = ChartDialog() dialog.show() app.exec_() if __name__ == "__main__": main()