项目场景:pyqt的NavigationToolbar在更新图片后保存图片时程序崩溃
项目相关背景:
写了一个基于pyqt的python程序,需要展示图像和加一个toolbar,以便对图像进行放大等操作
问题描述
项目中遇到的问题:
当程序展示第一个图像时,toolbar的下载按钮功能是可以正常使用的,但是当我展示第二张图片的时候,点击toolbar的保存图像按钮,程序突然崩溃了。
(给一张图像示例)
原因分析:
问题的分析:
查看我关于toolbar的代码,我猜测是每一个toolbar都是跟他创建时使用到的图片是一一绑定的,如果你更新了图片,但toolbar还是使用的上一张图片对应的toolbar,此时toolbar的功能是无法正常使用的,一旦你点击toolbar的任何功能按钮,程序就会报错崩溃
代码如下
if self.toolbar is not None: # 上个toolbar还存在
pass
else:
self.toolbar = NavigationToolbar(self.figure, self.tab)
self.verticalLayout_6.addWidget(self.toolbar)
解决方案:
问题的具体解决方案:
修改代码如下,即可解决问题
if self.toolbar is not None: # 上个toolbar还存在
# 更新toolbar,toolbar与图片一一绑定
self.verticalLayout_6.removeWidget(self.toolbar) # 先从父组件中移除toolbar
self.toolbar = NavigationToolbar(self.figure, self.tab) # 重新创建一个toolbar
self.verticalLayout_6.addWidget(self.toolbar) # 将此时的toolbar再次绑定到父组件中
else:
self.toolbar = NavigationToolbar(self.figure, self.tab)
self.verticalLayout_6.addWidget(self.toolbar)