bug解决:QFileDialog.getSaveFileName点击取消(关闭选取窗口)后整个程序退出

一.情况一

源代码:

    def selectImage(self):
        '''
        功能:选取需要增强的夜间图像,即从电脑中选取图像并显示在label上
        '''
        #参数三是默认路径(自己随便设),参数四是过滤哪些文件,比如下面就是只显示jpg或者png文件
        #fname,a=QFileDialog.getOpenFileName(self,'打开文件','.','图像文件(*.jpg *.png)')
        self.fname, ok = QFileDialog.getOpenFileName(self, '打开文件', 'D:/', '图像文件(*.jpg *.png)')
        #print(fname) fname是图片完整路径
        #在标签上放置图片
        self.readLabel.setPixmap(QPixmap(self.fname))
            
        return

bug原因:

应该是fname 没有获取引发后面的代码异常。

解决办法:

在QFileDialog.getSaveFileName函数后面打代码前先确保第二个参数不为空,如下

    def selectImage(self):
        '''
        功能:选取需要增强的夜间图像,即从电脑中选取图像并显示在label上
        '''
        #参数三是默认路径(自己随便设),参数四是过滤哪些文件,比如下面就是只显示jpg或者png文件
        #fname,a=QFileDialog.getOpenFileName(self,'打开文件','.','图像文件(*.jpg *.png)')
        self.fname, ok = QFileDialog.getOpenFileName(self, '打开文件', 'D:/', '图像文件(*.jpg *.png)')
        #print(fname) fname是图片完整路径
        #在标签上放置图片
        print(ok)
        if ok:
            self.readLabel.setPixmap(QPixmap(self.fname))

        return

完美解决!

二.情况二

源代码:

    def enhancement(self):
        '''
        功能:展示增强之后的图像
        '''
        img = cv.imread(self.fname)
        self.ans = MSRCP(img, sigma_list=[15, 80, 200], low_clip=0.01, high_clip=0.99)
        cv.imshow('MSRCP', self.ans)
        cv.waitKey(0)

 bug原因:

self.fname是在上那个函数中接受选取路径的,如果没有选取路径那么点击与下面这个函数相关的按钮,也会造成异常退出的情况,因为这是self.fname啥也没接收啊,就是还没被定义!

解决办法:

所以我们在窗口类,也就是这俩槽函数外面将此变量定义一下,然后再在槽函数里判断一下!如下

    def enhancement(self):
        '''
        功能:展示增强之后的图像
        '''
        if self.fname is not None:
            img = cv.imread(self.fname)
            self.ans = MSRCP(img, sigma_list=[15, 80, 200], low_clip=0.01, high_clip=0.99)
            cv.imshow('MSRCP', self.ans)
            cv.waitKey(0)

猜你喜欢

转载自blog.csdn.net/weixin_44593822/article/details/114792440