Seite 3 von 3

Re: QPlainTextEdit hängt

Verfasst: Dienstag 4. Januar 2011, 16:45
von lunar
Wieso verbindest Du das Signal nicht einfach an einem Punkt in Deinem Quelltext, an dem GUI und "Worker" gerade "bekannt" sind? Du musst den Slot ja auch nicht in der Worker-Klasse selbst verbinden, sondern kannst das auch außerhalb tun, also in etwa so:

Code: Alles auswählen

gui.text_changed_signal.connect(worker.update_text)

Re: QPlainTextEdit hängt

Verfasst: Dienstag 4. Januar 2011, 16:50
von JonasR
Achsooo also Signal und Slot beide im GUI definieren und in dem Slot eine funktion des workers aufrufen.
Werde ich mal testen. Vielen Dank =)

Re: QPlainTextEdit hängt

Verfasst: Dienstag 4. Januar 2011, 17:05
von lunar
Ich habe nicht gesagt, dass Du auch den Slot in der GUI definieren und von dort eine Methode des Workers aufrufen sollst.

Ich habe versucht Dir zu erklären, dass Du das Signal der GUI mit dem Slot des Workers verbinden sollst, und zwar an einer Stelle, an der Du gerade auch Zugriff auf das "GUI"-Exemplar hast (also logischerweise irgendwo außerhalb der Worker-Klasse).

Re: QPlainTextEdit hängt

Verfasst: Dienstag 4. Januar 2011, 17:19
von JonasR
Okay, sorry ich glaube ich bin heute einfach zu unkonzentriert.

Re: QPlainTextEdit hängt

Verfasst: Mittwoch 5. Januar 2011, 16:35
von JonasR
Ich habe heute das Programm sogut wie fertig gestellt. Nur noch ein par kleine Sachen hier und da :P
Mir gefällt da aber noch etwas nicht so ganz. Ich werde es mal grob ausschreiben:

Code: Alles auswählen

class MainWindow(QtGui.QMainWindow):
    tellPort = QtCore.Signal(int)
    def __init__(self):
        worker_object = Worker()
        self.tellPort.connect(worker_object.save_port)
        current_port = 99
        worker_object.getPorts.connect(partial(self.tellPort.emit, current_port))

class Worker(QtCore.QThread):
    getPorts = QtCore.Signal()

    def __init__(self):
        self.getPorts.emit()

    def save_port(self, port):
        self.port = port
So das ganze ist ein aufs nötige getrimmte Beispiel. Will halt nur zeigen dass ich von der Worker funktion ein Port anfordere und dieser dann vom MainWindow an eine Funktion des Workers überliefert wird. Es gefällt mir aber nicht dass ich nur um eine Variable zu deklarieren eine Funktion mache. Gibt es da noch andere Wege oder ist das okay?

Lunar du hast mir schon sehr geholfen dafür nochmals Danke =)