pyqtSignal argument 1 has unexpected type 'NoneType'

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Douchbag
User
Beiträge: 9
Registriert: Freitag 4. März 2016, 17:39

Ich stehe momentan auf dem Schlauch. Unzwar habe ich folgenden Code

Code: Alles auswählen

class daemon(QtCore.QObject):
    """
    Daemon Klasse fuer Linux

    geklaut :) von http://web.archive.org/web/20131101191715/http://www.jejik.com/files/examples/daemon3x.py
    """

    # Signal
    trigger = QtCore.pyqtSignal()

    def __init__(self, parent=None):
        super(daemon, self).__init__(parent)
        
    def run(self)
        eventHandler = gEventHandler()
        self.trigger.connect(eventHandler.dirChanged())    
       

Code: Alles auswählen

class gEventHandler():
    def __init__(self):
        self.actionlog = actionLog()

    # Modified Event. Wenn eine Datei oder Verzeichnis geändert wurden
    def dirChanged(self):
        self.actionlog.dirChanged()
Das Problem ist, dass ich beim aufrufen von run() folgende Fehlermeldung bekomme.

Code: Alles auswählen

Traceback (most recent call last):
  File "service.py", line 14, in <module>
    dmon.start()
  File "/home/ben/PycharmProjects/GhuulDMS/src/daemon.py", line 90, in start
    self.run()
  File "/home/ben/PycharmProjects/GhuulDMS/src/daemon.py", line 138, in run
    self.trigger.connect(eventHandler.dirChanged())
TypeError: argument 1 has unexpected type 'NoneType'
Das komische ist ja, dass meine Methode garkeine Argumente entgegen nimmt. Wieso meldet er dann das sie einen Typ "NoneType" hat? Sie brauch keine Argumente. Ich möchte erst später ein Argument übergeben.

Kann mir wer helfen?
BlackJack

@Douchbag: Du übergibst der `connect()`-Methode `None` und damit kommt die halt nicht klar. Warum `None`? Nun ja, weil das der Rückgabewert von dem Aufruf ist denn Du da machst. Du rufst `eventHandler.dirChanged()` auf statt die Methode zu übergeben. Lass die Klammern weg, dann hast Du die Methode und keinen Aufruf.

Edit: Bei den Klassennamen solltest Du Dich an die üblichen Konventionen halten was die Schreibweise angeht. Die ist sogar bei Qt und Python gleich.
Douchbag
User
Beiträge: 9
Registriert: Freitag 4. März 2016, 17:39

ok es scheint jetzt zu funktionieren. Wie sieht das denn dann aus wenn ich Argumente übergeben will? Und was meinst du mit Standard Namenskonvetionen?
BlackJack

@Douchbag: Die Namenskonventionen stehen im Style Guide for Python Code.

Wenn Du Argumente übergeben willst, dann musst Du das Signal entsprechend mit Argumenten erstellen und die dann halt beim `emit()` übergeben und beim Slot erwarten/übergeben bekommen.
Antworten