class ImportWidget(QDialog): def __init__(self, db_path, parent = None): QWidget.__init__(self) self.setParent(parent) self.setWindowFlags(Qt.Dialog) self.setWindowTitle(self.tr('Import')) self.setModal(1) self.startButton = QPushButton(self) self.startButton.setText('&start') self.connect( self.startButton, SIGNAL('clicked()'), self.onStart ) self.stopButton = QPushButton(self) self.stopButton.setText('&cancel') self.stopButton.setEnabled( False ) self.connect( self.stopButton, SIGNAL('clicked()'), self.onStop ) self.okButton = QPushButton(self) self.okButton.setText('&done') self.okButton.setEnabled( False ) self.connect( self.okButton, SIGNAL('clicked()'), self.onOk ) self.statusBar = QProgressBar(self) self.statusBar.setRange(0, 100) self.statusLabel = QLabel(self) self.worker = ImportWorker(db_path, self) self.connect( self.worker, SIGNAL('statusChanged'), self.statusBar.setValue ) self.connect( self.worker, SIGNAL('done'), self.onDone ) self.connect( self.worker, SIGNAL('message'), self.statusLabel.setText ) self.connect( self.worker, SIGNAL('range'), self.statusBar.setRange ) self.layout = QGridLayout(self) self.layout.addWidget( self.startButton, 0, 0 ) self.layout.addWidget( self.stopButton, 0, 1 ) self.layout.addWidget( self.okButton, 0, 2 ) self.layout.addWidget( self.statusBar, 1, 0, 1, 3 ) self.layout.addWidget( self.statusLabel, 2, 0, 1, 3 ) def onStart(self): self.startButton.setEnabled( False ) self.stopButton.setEnabled( True ) self.statusBar.setEnabled( True ) self.statusLabel.setEnabled( True ) Thread(target=self.worker.run).start() def onDone(self): self.okButton.setEnabled( True ) self.stopButton.setEnabled( False ) def onStop(self): self.worker.term() self.statusBar.setEnabled( False ) self.statusLabel.setEnabled( False ) self.startButton.setEnabled( True ) self.stopButton.setEnabled( False ) def onOk(self): self.accept() def closeEvent(self,event): if self.worker.running: event.ignore() else: event.accept()