ERROR!!! try to create not callable WeakMethodReference

  • Hallo, ich bin einer der Entwickler des SerienRecorder Plugins - mit der aktuellen Version gibt es in einer Situation einen Crash mit obiger Meldung, bei Boxen mit DreamboxOS.


    Leider habe ich keine entsprechende Box um dem Fehler auf die Spur zu kommen, aber vielleicht kann hier jemand helfen:


    Code
    self.singleTimer_conn = self.singleTimer.timeout.connect(serienRecCheckForRecording(self.session, True))


    Diese Zeile löst den Crash aus, wobei "serienRecCheckForRecording" eine Klasse ist, offenbar ist das das Problem, denn andere eTimer funktionieren.
    Würde mich freuen wenn jemand eine Lösung kennt.


    MacDisein

    • Offizieller Beitrag

    In dem Fall ist der code falsch :smiling_face:


    serienRecCheckForRecording(self.session, True) ruft die funktion sofort auf, damit wird der rückgabewert der funktion als "callback" übergeben, da der bestimmt keine funktion ist geht das natürlich so nicht.
    Das übrigens auch früher schon falsch so ;).
    Du benögigst zwingend eine funktion oder methode welche kein parameter benötigt.


    Grob Umrissen muss es in Etwa so aussehen:

    Python
    class bla:
    	def __init__(self, ....):
    		self.singleTimer_conn = self.singleTimer.timeout.connect(self.serienRecCheckForRecordingWithTimer)
    	def serienRecCheckForRecordingWithTimer(self):
    		serienRecCheckForRecording(self.session, True)
  • Hallo Reichi,
    danke für die schnelle Hilfe.


    Komischerweise funktioniert die nicht DreamboxOS Variante so problemlos.
    Ich werde das mal umbauen und probieren, ich hatte das schon mal auf diese Weise gemacht und da wurde die Klasse nicht aufgerufen, aber ich hatte dann auch nicht mehr die Zeit das zu analysieren - ich melde mich dann.

  • Der Code ist im github verfügbar.


    https://github.com/einfall/serienrecorder


    Konkret um das Modul "SerienRecorder.py" das leider sehr unübersichtlich geworden ist.
    Der Fehler tritt in der Klasse "serienRecMain" und dort in der Methode "keyCancel" auf.


    Leider bin ich nicht so wirklich fit in Python, meine Sprache ist mehr C++, deswegen ist es mir bisher auch nicht gelungen den Code zu refactorieren.


    Aber das wäre aber echt super, wenn du dort mal einen Blick reinwerfen könntest.