mirror of
https://github.com/wassname/sloth.git
synced 2026-07-10 00:18:30 +08:00
Load annotations in background after starting
This commit is contained in:
+33
-1
@@ -5,7 +5,7 @@ import fnmatch
|
||||
from PyQt4.QtGui import QMainWindow, QSizePolicy, QWidget, QVBoxLayout, QAction,\
|
||||
QKeySequence, QLabel, QItemSelectionModel, QMessageBox, QFileDialog, QFrame, \
|
||||
QDockWidget
|
||||
from PyQt4.QtCore import SIGNAL, QSettings, QSize, QPoint, QVariant, QFileInfo
|
||||
from PyQt4.QtCore import SIGNAL, QSettings, QSize, QPoint, QVariant, QFileInfo, QTimer, pyqtSignal, QObject
|
||||
import PyQt4.uic as uic
|
||||
from sloth.gui import qrc_icons # needed for toolbar icons
|
||||
from sloth.gui.propertyeditor import PropertyEditor
|
||||
@@ -22,10 +22,29 @@ GUIDIR=os.path.join(os.path.dirname(__file__))
|
||||
def bind(function, labeltool):
|
||||
return lambda: function(labeltool)
|
||||
|
||||
class BackgroundLoader(QObject):
|
||||
finished = pyqtSignal()
|
||||
|
||||
def __init__(self, model):
|
||||
QObject.__init__(self)
|
||||
self._iterators = [model.iterator(maxlevels=1), model.iterator()]
|
||||
|
||||
def load(self):
|
||||
if self._iterators:
|
||||
try:
|
||||
self._iterators[0].next()
|
||||
except StopIteration:
|
||||
self._iterators.pop(0)
|
||||
else:
|
||||
self.finished.emit()
|
||||
|
||||
class MainWindow(QMainWindow):
|
||||
def __init__(self, labeltool, parent=None):
|
||||
QMainWindow.__init__(self, parent)
|
||||
|
||||
self.idletimer = QTimer()
|
||||
self.loader = None
|
||||
|
||||
self.labeltool = labeltool
|
||||
self.setupGui()
|
||||
self.loadApplicationSettings()
|
||||
@@ -59,6 +78,19 @@ class MainWindow(QMainWindow):
|
||||
self.treeview.selectionModel().currentChanged.connect(self.labeltool.setCurrentImage)
|
||||
self.property_editor.onModelChanged(self.labeltool.model())
|
||||
|
||||
# Start background loading thread
|
||||
if self.loader is not None:
|
||||
self.idletimer.timeout.disconnect()
|
||||
self.loader = BackgroundLoader(self.labeltool.model())
|
||||
self.idletimer.timeout.connect(self.loader.load)
|
||||
self.loader.finished.connect(self.onBackgroundLoadingFinished)
|
||||
self.idletimer.start()
|
||||
|
||||
def onBackgroundLoadingFinished(self):
|
||||
self.idletimer.timeout.disconnect()
|
||||
self.statusBar().showMessage("Background loading finished", 5000)
|
||||
self.loader = None
|
||||
|
||||
def onCurrentImageChanged(self):
|
||||
new_image = self.labeltool.currentImage()
|
||||
self.scene.setCurrentImage(new_image)
|
||||
|
||||
Reference in New Issue
Block a user