Arrrrgghhh, dieses Python macht mich wahnsinnig.
Da bin ich von meinem geliebten C doch arg verwöhnt.
Naja, wie dem ich auch sei - ich versuche mich trotzdem daran und scheitere meistens.
Es geht um folgendes:
Ich möchte gerne bei der Wiedergabe eines Videos eine Anzeige bekommen wenn ich die Skiptasten (3, 6, 9 bzw. 7, 4, 1) drücke. Es soll analog zum Spulen funktionieren, wo oben links die aktuelle Spulgeschwindigkeit angezeigt wird.
Was ich schon rausgefunden habe ist, dass die Events der Tasten die "action" Methode in der InfoBarSeek Klasse aufrufen.
Damit jetzt nicht jeder der mir ein paar Tips gegen möchte die Stelle aus dem Code suchen muss, poste ich hier mal den Originalcode:
def action(self, contexts, action):
if action[:5] == "seek:":
time = int(action[5:])
self.screen.seekRelative(time * 90000)
return 1
else:
return HelpableActionMap.action(self, contexts, action)
Soweit kann ich auch noch folgen, außer, dass mir nicht klar ist, was die HelpableActionMap tut, aber für den Fall mit den Zifferntasten reicht ja der if Fall.
Wie ich das jetzt weiter verstanden habe, ist die Klasse InfoBarPVRState für die Anzeige auf dem Bildschirm zuständig.
Dort gibt es eine Art Callback der auf ein Ereignis reagiert (sorry wenn ich die falschen Begrifflichkeiten verwende) in diesem Fall "onPlayStateChanged".
Dieser Event "onPlayStateChanged" wird in der Klasse InfoBarSeek in der Methode "setSeekState" ausgelöst und zwar so:
Ich hoffe meine Gedanken sind bis hierhin richtig.
Jetzt dachte ich mir, um einfach mal irgendetwas anzeigen zu lassen, wenn ich auf eine von den Skiptasten drücke, könnte ich einen der bereits vordefinieren Seekstates verwenden. Ich habe also die obige "action" Methode entsprechend geändert:
def action(self, contexts, action):
if action[:5] == "seek:":
time = int(action[5:])
for c in self.onPlayStateChanged:
c(SEEK_STATE_BACK_128X)
self.screen.seekRelative(time * 90000)
return 1
else:
return HelpableActionMap.action(self, contexts, action)
Ich habe also die for-Schleife für den Event einfach in die Action Methode eingebaut - das Skript wird auch kompiliert - leider bekomme ich einen Bluescreen wenn ich auf einer der Skip-Tasten drücke.
Vielleicht kann mir einer der Entwickler ein wenig unter die Arme greifen und mir vielleicht sagen, wo mein Fehler liegt. Mir ist auch noch nicht ganz klar, wieso die action Methode weiter eingerückt ist, als die anderen Methoden in der Klasse.
Vielen Dank
MacDisein