57 lines
2.0 KiB
Python
57 lines
2.0 KiB
Python
![]() |
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()
|