Signale und emit

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Omm
User
Beiträge: 63
Registriert: Samstag 7. April 2018, 14:05

Montag 11. Januar 2021, 20:03

8h später 1 Erfahrung reicher.
Ein Punkt habe ich leider noch.
Das senden eines Signal geht nur über den Pushbutton oder auch über einen Timer.
Wenn ich aber 'jobmessage' zur Laufzeit ausführe, kommt nichts an. Ich denke das hängt mit einen Event zusammen.
Kann dies sein?

Code: Alles auswählen

import sys
from PyQt5.QtCore import pyqtSignal, QObject
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton


class xyz(QObject):
    message = pyqtSignal(str)

    def __init__(self, parent= None):
        super(xyz, self).__init__(parent)

    def jobmessage(self):
        self.message.emit('meldung')


class MainWindow(QMainWindow):
    def __init__(self, parent= None):
        super(MainWindow, self).__init__(parent)
        ini_xyz = xyz(self)
        ini_xyz.message.connect(self.meldung)

        self.btn = QPushButton("sender", self)
        self.btn.clicked.connect(ini_xyz.jobmessage)

    def meldung (self, meldung):
        print(meldung)



app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
__deets__
User
Beiträge: 9143
Registriert: Mittwoch 14. Oktober 2015, 14:29

Montag 11. Januar 2021, 20:26

Das liegt an etwas anderem. Dein Objekt ini_xyz wird kurz nach Entstehung garbage collected. Und damit verschwinden auch seine Verbindungen.
Omm
User
Beiträge: 63
Registriert: Samstag 7. April 2018, 14:05

Montag 11. Januar 2021, 20:39

keine Ahnung wie ich das verhindern kann.
Na ja, dann eben ohne Signale.
__deets__
User
Beiträge: 9143
Registriert: Mittwoch 14. Oktober 2015, 14:29

Montag 11. Januar 2021, 21:36

Das kann man ja durchaus erlesen, was da so passiert. Und es dann verhindern. https://stackify.com/python-garbage-collection/
Antworten