QPlainTextEdit hängt

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
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)
JonasR
User
Beiträge: 251
Registriert: Mittwoch 12. Mai 2010, 13:59

Achsooo also Signal und Slot beide im GUI definieren und in dem Slot eine funktion des workers aufrufen.
Werde ich mal testen. Vielen Dank =)
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).
JonasR
User
Beiträge: 251
Registriert: Mittwoch 12. Mai 2010, 13:59

Okay, sorry ich glaube ich bin heute einfach zu unkonzentriert.
JonasR
User
Beiträge: 251
Registriert: Mittwoch 12. Mai 2010, 13:59

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 =)
Antworten