Seite 1 von 1

pyqtSignal argument 1 has unexpected type 'NoneType'

Verfasst: Mittwoch 16. März 2016, 15:34
von Douchbag
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?

Re: pyqtSignal argument 1 has unexpected type 'NoneType'

Verfasst: Mittwoch 16. März 2016, 15:39
von 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.

Re: pyqtSignal argument 1 has unexpected type 'NoneType'

Verfasst: Mittwoch 16. März 2016, 15:57
von Douchbag
ok es scheint jetzt zu funktionieren. Wie sieht das denn dann aus wenn ich Argumente übergeben will? Und was meinst du mit Standard Namenskonvetionen?

Re: pyqtSignal argument 1 has unexpected type 'NoneType'

Verfasst: Mittwoch 16. März 2016, 17:13
von 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.