バグ修正:QFileDialog.getSaveFileNameが[キャンセル]をクリック(選択ウィンドウを閉じる)し、プログラム全体が終了します

1.状況1

ソースコード:

    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

バグの原因:

fnameは、コードビハインドの原因となった例外を取得しなかったはずです。

解決:

次のように、QFileDialog.getSaveFileName関数の後にコードを入力する前に、2番目のパラメーターが空でないことを確認してください。

    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

完璧な解決策!

 

2.状況2

ソースコード:

    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)

 バグの原因:

self.fnameは、上記の関数で選択されたパスを受け入れます。パスが選択されていない場合、以下の関数に関連するボタンをクリックすると、これもself.fnameであり、何も受信しなかったため、異常終了が発生します。定義されていません!

解決:

したがって、この変数をウィンドウクラス、つまり2つのスロット関数の外側で定義し、スロット関数で判断します。次のように

    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