Part1开头
前几天转发了当气象绘图碰上PyQt5
成品如图:
Part2今天任务
今天主要任务就是复刻一个PyQt6绘图程序。主要功能是选择文件,把选择的文件在一个LineEdit中显示出来,这是一个特定的时间序列数据,把这个序列求平均,计算均方差,标准差,把平均值、均方差、标准差绘到一张图上。
一个WidGet上,填加按钮(QPushButton
)、编辑框、和FigureCanvas
,FigureCanvas
做为Matplotlib的容器,绘图部分都是在Matplotlib中实现,最后把Figure()
给回FigureCanvas
,通过Layout
的addWidget
把那个容器当一个组件填加进来进行展示。绘图过程都是通过MatPlotlib实现,保存也是通过fig.save实现。整体就是这么一个思路。
Part3出错
绘图是原来已有的代码改的,需要适配PyQt6
。另外addWidget
执行一次没问题,画完第一张图,再画第二张,会把原来的绘图区一分为二,再画一次分三份。找到原因后,看有没有Canvas
这个组件,有就删除,没有就正常执行。
Part4最后看成品:Part5代码部分:
1按钮绑定
self.o = QPushButton("选择文件")
self.o.clicked.connect(self.choose_file)
self.textEdit = QLineEdit()
self.b = QPushButton("绘图")
self.b.clicked.connect(self.drawer)
self.save = QPushButton("保存图像")
self.save.clicked.connect(self.save_fig)
2选择文件
def choose_file(self):
self.filename, filetype = PyQt6.QtWidgets.QFileDialog.getOpenFileName(None, "选择文件",os.getcwd(),"All Files(*);;Text Files(*.txt)")
self.textEdit.setText(self.filename)
self.path_to_df('60')
print(self.df)
3保存文件
def save_fig(self):
file_dialog = PyQt6.QtWidgets.QFileDialog()
file_name, _ = file_dialog.getSaveFileName(self, "保存图像", "", "Images (*.png *.jpg)")
if file_name:
self.fig.savefig(file_name,dpi = 300, bbox_inches='tight')
4检查canvas是否存在
if hasattr(self, 'canvas'):
self.layout.removeWidget(self.canvas)
self.canvas.close()
self.canvas = FigureCanvas(self.fig)
self.layout.addWidget(self.canvas)