Ich habe den folgenden Code:
class Functions(QObject):
mysig = Signal(filename)
def __init__(self, parent=None):
super(Functions, self).__init__(parent)
self.result = None
def showDialog(self, filename):
self.mysig.emit(filename)
def grabResult(self):
while not self.result:
time.sleep(5)
return result #this is the question
def setResult(self, result):
self.result = result
Der andere Teil des Codes hat das hier:
class Dialog(QDialog):
anotherSig = Signal(str)
fun = Functions()
def __init__(self, parent=None, filename=filename):
self.filename = filename
#Hier wird basierend auf dem Filename-Parameter ein Bild angezeigt
def okButtonClicked(self):
text = self.lineedit.text()
fun.setResult(text)
#Habe auch das probiert:
self.anotherSig.emit(text)
Die Functions()
Klasse wird von einem Worker QThread
aufgerufen (hier nicht gezeigt).
Meine Frage ist: wie sage ich meiner Functions
Klasse, dass der Benutzer den Text eingegeben und die OK-Schaltfläche geklickt hat? Ich habe versucht, das anotherSig
Signal zu verbinden, aber wenn ich das tue, beschwert sich Qt darüber, dass QPixmaps nicht sicher von einem anderen Thread aus gesetzt werden können, und es funktioniert nicht.
Die Methode, die ich hier verwende, "funktioniert", aber ich habe das Gefühl, dass sie nicht sehr zuverlässig ist. Außerdem funktioniert es nur, wenn alle relevanten Methoden in der Functions
Klasse als @classmethod
markiert sind - auf diese Weise funktioniert es aus irgendeinem Grund nicht. Die setResult
wird aufgerufen (Ich habe eine print
Anweisung hinzugefügt, um sicherzustellen), aber der grabResult
zeigt immer noch self.result
als None
an.