From fdb18b9b7bb57f623b81b2f35b6bb776714ae91f Mon Sep 17 00:00:00 2001 From: Kentaro Wada Date: Sat, 31 Mar 2018 20:47:32 +0900 Subject: [PATCH] Show errorMessage with not existing file to load --- labelme/app.py | 124 +++++++++++++++++++++++++------------------------ 1 file changed, 63 insertions(+), 61 deletions(-) diff --git a/labelme/app.py b/labelme/app.py index 6afbc79..6ad69c5 100644 --- a/labelme/app.py +++ b/labelme/app.py @@ -738,68 +738,70 @@ class MainWindow(QMainWindow, WindowMixin): if filename is None: filename = self.settings.get('filename', '') filename = str(filename) - if QFile.exists(filename): - # assumes same name, but json extension - self.status("Loading %s..." % os.path.basename(str(filename))) - label_file = os.path.splitext(filename)[0] + '.json' - if QFile.exists(label_file) and LabelFile.isLabelFile(label_file): - try: - self.labelFile = LabelFile(label_file) - # FIXME: PyQt4 installed via Anaconda fails to load JPEG - # and JSON encoded images. - # https://github.com/ContinuumIO/anaconda-issues/issues/131 - if QImage.fromData(self.labelFile.imageData).isNull(): - raise LabelFileError( - 'Failed loading image data from label file.\n' - 'Maybe this is a known issue of PyQt4 built on' - ' Anaconda, and may be fixed by installing PyQt5.') - except LabelFileError as e: - self.errorMessage('Error opening file', - ("

%s

" - "

Make sure %s is a valid label file.")\ - % (e, label_file)) - self.status("Error reading %s" % label_file) - return False - self.imageData = self.labelFile.imageData - self.imagePath = os.path.join(os.path.dirname(label_file), - self.labelFile.imagePath) - self.lineColor = QColor(*self.labelFile.lineColor) - self.fillColor = QColor(*self.labelFile.fillColor) - else: - # Load image: - # read data first and store for saving into label file. - self.imageData = read(filename, None) - if self.imageData is not None: - # the filename is image not JSON - self.imagePath = filename - self.labelFile = None - image = QImage.fromData(self.imageData) - if image.isNull(): - formats = ['*.{}'.format(fmt.data().decode()) - for fmt in QImageReader.supportedImageFormats()] - self.errorMessage( - 'Error opening file', - '

Make sure {0} is a valid image file.
' - 'Supported image formats: {1}

' - .format(filename, ','.join(formats))) - self.status("Error reading %s" % filename) + if not QFile.exists(filename): + self.errorMessage( + 'Error opening file', 'No such file: %s' % filename) + return False + # assumes same name, but json extension + self.status("Loading %s..." % os.path.basename(str(filename))) + label_file = os.path.splitext(filename)[0] + '.json' + if QFile.exists(label_file) and LabelFile.isLabelFile(label_file): + try: + self.labelFile = LabelFile(label_file) + # FIXME: PyQt4 installed via Anaconda fails to load JPEG + # and JSON encoded images. + # https://github.com/ContinuumIO/anaconda-issues/issues/131 + if QImage.fromData(self.labelFile.imageData).isNull(): + raise LabelFileError( + 'Failed loading image data from label file.\n' + 'Maybe this is a known issue of PyQt4 built on' + ' Anaconda, and may be fixed by installing PyQt5.') + except LabelFileError as e: + self.errorMessage('Error opening file', + ("

%s

" + "

Make sure %s is a valid label file.")\ + % (e, label_file)) + self.status("Error reading %s" % label_file) return False - self.image = image - self.filename = filename - self.canvas.loadPixmap(QPixmap.fromImage(image)) - if self.labelFile: - self.loadLabels(self.labelFile.shapes) - self.setClean() - self.canvas.setEnabled(True) - self.adjustScale(initial=True) - self.paintCanvas() - self.addRecentFile(self.filename) - self.toggleActions(True) - self.status("Loaded %s" % os.path.basename(str(filename))) - if filename in self.imageList: - self.fileListWidget.setCurrentRow(self.imageList.index(filename)) - return True - return False + self.imageData = self.labelFile.imageData + self.imagePath = os.path.join(os.path.dirname(label_file), + self.labelFile.imagePath) + self.lineColor = QColor(*self.labelFile.lineColor) + self.fillColor = QColor(*self.labelFile.fillColor) + else: + # Load image: + # read data first and store for saving into label file. + self.imageData = read(filename, None) + if self.imageData is not None: + # the filename is image not JSON + self.imagePath = filename + self.labelFile = None + image = QImage.fromData(self.imageData) + if image.isNull(): + formats = ['*.{}'.format(fmt.data().decode()) + for fmt in QImageReader.supportedImageFormats()] + self.errorMessage( + 'Error opening file', + '

Make sure {0} is a valid image file.
' + 'Supported image formats: {1}

' + .format(filename, ','.join(formats))) + self.status("Error reading %s" % filename) + return False + self.image = image + self.filename = filename + self.canvas.loadPixmap(QPixmap.fromImage(image)) + if self.labelFile: + self.loadLabels(self.labelFile.shapes) + self.setClean() + self.canvas.setEnabled(True) + self.adjustScale(initial=True) + self.paintCanvas() + self.addRecentFile(self.filename) + self.toggleActions(True) + self.status("Loaded %s" % os.path.basename(str(filename))) + if filename in self.imageList: + self.fileListWidget.setCurrentRow(self.imageList.index(filename)) + return True def resizeEvent(self, event): if self.canvas and not self.image.isNull()\ -- GitLab