Portál AbcLinuxu, 12. května 2025 04:44
from PyQt4 import QtCore, QtGui import time,sys # vytvoreni mutexu mutex=QtCore.QMutex() class thread(QtCore.QThread): """ Thread, ktery co sekundu posune progress dialog o jeden stupen, dokud nebude na 100 """ def __init__(self): QtCore.QThread.__init__(self,None) def run(self): """ Funkce, ktera je spustena po zapnuti threadu funkci start() """ # automaticke lockovani threadu pri praci s promennyma mimo tento thread locker = QtCore.QMutexLocker(mutex) i=0 # pocitadlo sekund while i!=1000: # ukonceni threadu pokud v progressDialogu zmenime promennou end na true if win.end==True: break time.sleep(0.1) i+=1 # emitovani signalu, na ktery je progressDialog napojen self.emit(QtCore.SIGNAL("inc(int)"), i) class progress(QtGui.QProgressDialog): """ Derivovana trida progress dialogu """ def __init__(self): """ Vytvori a spusti thread a progressDialog """ QtGui.QProgressDialog.__init__(self,"Test dialogu","Zrusit",0,1000) self.setWindowModality(QtCore.Qt.WindowModal) # signaly potrebne k ukonceni threadu pri uzavreni okna a kliknuti na tlacitko pro ukonceni dialogu QtCore.QObject.connect(app,QtCore.SIGNAL("lastWindowClosed() "),self._exit) QtCore.QObject.connect(self,QtCore.SIGNAL("canceled() "),self._exit) # vytvoreni threadu pomoci tridy thread() self.thread=thread() self.end=False # napojeni signalu pro zvednuti stavu progressbaru na fci progressDialogu setValue(int) QtCore.QObject.connect(self.thread, QtCore.SIGNAL("inc(int)"), self.setValue,QtCore.Qt.QueuedConnection) # zapnuti threadu self.thread.start() def _exit(self): """ Vypnuti threadu """ self.end=True self.thread.wait() app.quit() app = QtGui.QApplication(sys.argv) win=progress() win.show() sys.exit(app.exec_())
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.