From 1c5298f13dc1fb4cc095b7cc6ecc1c424bba8ebd Mon Sep 17 00:00:00 2001 From: tzutalin Date: Fri, 13 Oct 2017 23:44:47 +0800 Subject: [PATCH] Add a button in menu to reset all --- icons/resetall.png | Bin 0 -> 3637 bytes labelImg.py | 25 ++++++++++++++++--------- libs/settings.py | 13 ++++++++++--- resources.qrc | 1 + 4 files changed, 27 insertions(+), 12 deletions(-) create mode 100644 icons/resetall.png diff --git a/icons/resetall.png b/icons/resetall.png new file mode 100644 index 0000000000000000000000000000000000000000..acc12c332879ad5eeeb54c7b8a3d5df8244123ec GIT binary patch literal 3637 zcmV-54$AR~P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 Hu0mjfiB-@u literal 0 HcmV?d00001 diff --git a/labelImg.py b/labelImg.py index 2361810b..fff214c9 100755 --- a/labelImg.py +++ b/labelImg.py @@ -44,12 +44,10 @@ __appname__ = 'labelImg' # Utility functions and classes. - def have_qstring(): '''p3/qt5 get rid of QString wrapper as py3 has native unicode str type''' return not (sys.version_info.major >= 3 or QT_VERSION_STR.startswith('5.')) - def util_qt_strlistclass(): return QStringList if have_qstring() else list @@ -225,11 +223,14 @@ class MainWindow(QMainWindow, WindowMixin): save = action('&Save', self.saveFile, 'Ctrl+S', 'save', u'Save labels to file', enabled=False) + saveAs = action('&Save As', self.saveFileAs, - 'Ctrl+Shift+S', 'save-as', u'Save labels to a different file', - enabled=False) - close = action('&Close', self.closeFile, - 'Ctrl+W', 'close', u'Close current file') + 'Ctrl+Shift+S', 'save-as', u'Save labels to a different file', enabled=False) + + close = action('&Close', self.closeFile, 'Ctrl+W', 'close', u'Close current file') + + resetAll = action('&ResetAll', self.resetAll, None, 'resetall', u'Reset all') + color1 = action('Box &Line Color', self.chooseColor1, 'Ctrl+L', 'color_line', u'Choose Box line color') color2 = action('Box &Fill Color', self.chooseColor2, @@ -317,7 +318,7 @@ class MainWindow(QMainWindow, WindowMixin): self.popLabelListMenu) # Store actions for further handling. - self.actions = struct(save=save, saveAs=saveAs, open=open, close=close, + self.actions = struct(save=save, saveAs=saveAs, open=open, close=close, resetAll = resetAll, lineColor=color1, fillColor=color2, create=create, delete=delete, edit=edit, copy=copy, createMode=createMode, editMode=editMode, advancedMode=advancedMode, @@ -326,7 +327,7 @@ class MainWindow(QMainWindow, WindowMixin): fitWindow=fitWindow, fitWidth=fitWidth, zoomActions=zoomActions, fileMenuActions=( - open, opendir, save, saveAs, close, quit), + open, opendir, save, saveAs, close, resetAll, quit), beginner=(), advanced=(), editMenu=(edit, copy, delete, None, color1, color2), @@ -356,7 +357,7 @@ class MainWindow(QMainWindow, WindowMixin): self.lastLabel = None addActions(self.menus.file, - (open, opendir, changeSavedir, openAnnotation, self.menus.recentFiles, save, saveAs, close, None, quit)) + (open, opendir, changeSavedir, openAnnotation, self.menus.recentFiles, save, saveAs, close, resetAll, quit)) addActions(self.menus.help, (help,)) addActions(self.menus.view, ( self.autoSaving, @@ -1208,6 +1209,12 @@ class MainWindow(QMainWindow, WindowMixin): self.canvas.setEnabled(False) self.actions.saveAs.setEnabled(False) + def resetAll(self): + self.settings.reset() + self.close() + proc = QProcess() + proc.startDetached(os.path.abspath(__file__)) + def mayContinue(self): return not (self.dirty and not self.discardChangesDialog()) diff --git a/libs/settings.py b/libs/settings.py index 3b5e86f8..1ee27b76 100644 --- a/libs/settings.py +++ b/libs/settings.py @@ -21,9 +21,10 @@ class Settings(object): return default def save(self): - with open(self.path, 'wb') as f: - pickle.dump(self.data, f, pickle.HIGHEST_PROTOCOL) - return True + if self.path: + with open(self.path, 'wb') as f: + pickle.dump(self.data, f, pickle.HIGHEST_PROTOCOL) + return True return False def load(self): @@ -33,3 +34,9 @@ class Settings(object): return True return False + def reset(self): + if os.path.exists(self.path): + os.remove(self.path) + print ('Remove setting pkl file ${0}'.format(self.path)) + self.data = {} + self.path = None \ No newline at end of file diff --git a/resources.qrc b/resources.qrc index 9ae18234..b33fe32b 100644 --- a/resources.qrc +++ b/resources.qrc @@ -27,6 +27,7 @@ icons/cancel.png icons/next.png icons/prev.png +icons/resetall.png