ich habe neuerdings das erste mal QThread verwendet um eine ProgressBar zu füllen, wenn ein mouseover-event von einem Button ausgelöst wird.
Mein Problem ist nun, dass theoretisch (wenn der Nutzer seine Maus wild über die Buttons fährt), so viele Threads erstellt werden, dass das Programm abschmiert.
Ich habe versucht herauszufinden, wie ich die Anzahl an Instanzen eines QThreads limitieren kann, oder einen anderen Thread beenden kann, wenn ein neuer erstellt wird, aber leider ohne Erfolg.
Wie kann ich laufende Threads beenden oder die maximal Anzahl an parallel laufenden Threads begrenzen?
Hier ein Auszug:
Code: Alles auswählen
#Thread
class External(QThread):
#Die Anzahl an laufenden Threads begrenzen?
countChanged = pyqtSignal(int)
finished = pyqtSignal()
def run(self):
count = 0
while count < 100:
count += 1
time.sleep(0.005)
self.countChanged.emit(count)
self.finished.emit()
#EventFitler für den mouseover Effekt
def eventFilter(self, object, event):
if event.type() == QEvent.Enter:
#Den alten Thread hier beenden?
self.calc = External()
self.calc.start()
self.calc.countChanged.connect(self.onCountChanged)
self.calc.finished.connect(lambda: self.onFinish(object))
return True
return False
def onCountChanged(self, value):
self.progressBar.setValue(value)
def onFinish(self, object):
self.progressBar.setValue(0)
.
.
.
if __name__ == '__main__':
app = QApplication(sys.argv)
MainPage().show()
sys.exit(app.exec_())
Danke und Gruß,
Sev