An die python cracks. Hilfe bei Minidisplay.

  • Hallo,

    also ich komme nicht weiter.


    Das funktioniert einzeln. ich würde jetzt gerne daraus eine Funktion machen die ich aufrufen kann wie die anderen. Aber ohne das sine wave. Ändern soll man den Text und die Textgröße.
    Ich blicke da nicht durch.

  • Keine Ahnung ob das funktioniert, da Du ja nur einen Auszug aus dem kompletten Code anbietest,
    aber probiere es mal so (alle von mir geänderten Stellen sind noch als kommentierte Version vorhanden).
    Den y-Wert habe ich einfach auf 10 gesetzt, dass mußt Du probiere wie das am Display aussieht.
    Aufgerufen wie die anderen auch

    running('MeinText')
    oder mit font
    running('Mein Text', font28)

    Cheers
    Claudia

  • Ah ok, bin davon ausgegangen dass dies ein Teil des Kodi-Addon Codes ist.

    Eigentlich sollte es laufen, wenn Du die Zeilen 93-126 vom animate.py mit der Funktion ersetzt
    und danach dann den Aufruf machst.

    Kannst Du das mal probieren ob das tut?
    Wie ist den der Y Wert in deinem AddonCode gesetzt, nimm zum testen mal diesen Wert.
    1 zu 1 wirst Du es aber nicht ins Addon kopieren können aber wenn es läuft dann können wir weiter schauen.

    Cheers
    Claudia

  • So, nach einer Nacht schlafen und Deiner Bestätigung habe ich es zumindest einmal Laufen lassen können.

    Aber mit while True: läuft es dann aber auch nur das. Ohne While True wird nichts angezeigt. Ich denke weil er genau diese Funktion immer wieder wiederholen muss bis ich ihm was anderes sage.

  • Also in meinem Add On funktioniert das als def mit while True: dann aber auch nur das. Wenn er was anderes anzeigen soll macht er das nicht er bleibt in der Schleife hängen.
    Lasse ich das while True weg dann geht alles nur in der Funktion wird nichts angezeigt.
    Ich lese das so:
    Um einen Scrolltext anzeigen zu können muss diese Funktion in einer Schleife laufen weil er das Bild ständig neu generiert.

  • Absolut richtig, dass war. meine ich, auch damals eine Anmerkung von mir - bin mir nicht mehr 100%ig sicher.

    Solange eine Schleife läuft ist alles andere blockiert. In solch einem Fall würde man auf events/mutexes/semaphoren etc...
    zurückgreifen.

    Sprich, innerhalb der Schleife wird ein Zustand abgefragt welcher entscheidet ob er in der Schleife bleibt oder abbrechen soll.
    Damit dies aber funktioniert muß der TriggerCode, der der dafür sorgt das die Schleife unterbrochen werden soll unabhängig
    von deinem Addon-Mainloop laufen. Hier SCHEINT sich die Monitorklasse zu eigenen, da diese einige Events bekommt.
    Bevor ich nun aber anfange deinen Code zu anaylsieren ob dieser sich dazu umbiegen läßt, die Frage hast Du zukünftig vor
    noch weitere Features einzubauen? Wenn ja, vlt. mal kurz erläutern nicht das ich mir die Arbeit mache und dann alles
    hinfällig wird weil Du noch anderes implementieren willst.

    Natürlich nur, wenn Du willst.

    Cheers
    Claudia

  • Oh,

    ok das verstehe ich doch ob ich noch andere Funktionen hinzufügen möchte kann ich schwer sagen. Ich würde gerne noch einen Statusbalken einfügen der anhand des Wertes "Player.ProgressCache". Der soll eine Zahl ausgeben also die Prozent. Hier wollte ich einfach einfach Bilder aufrufen lassen. Das steht aber noch nicht an erster Stelle.

    Ja ich habe verstanden das man die Schleife anhand eines Wertes definieren muss ob sie läuft oder stoppt. Ist schwer. Ich denke vielleicht muss ich einfach eingestehen das hier mein Verständnis für das Programmieren an einem Ende angekommen ist.
    Ich wollte auch nicht das man mir meinen Code schreibt.
    Wenn man jetzt eine Funktion so macht das sie von einem vorher definierten "xbmcgui.getCurrentWindowId()" abhängig ist?
    Z.b. Ich wenn ich beim Schauen eines Filmes mit den Namen des Filmes anzeigen lassen möchte, dann wird die Schleife nur ausgeführt wenn der Wert "VideoPlayer.Content(movie)" True ist. Ist dieser Wert False dann überspringe die Schleife.
    Aufgerufen vielleicht mit make_scrolltext(movie, Filmtitel, font36)
    Ich hoffe Du verstehst was ich meine.

    Danke nochmal für die viele Hilfe und die Geduld.

  • Sag mal. Welches Betriebssystem nutzt du eigentlich während du so programmierst?

    Github ist eine unglaublich großartige und mächtige Plattform und grundsätzlich nicht schwer zu verstehen.

    Wenn du da deinen Code veröffentlichen würdest, wäre das ziemlich cool. Man könnte so viel besser mal rein schauen, sehen, was du gemacht hast (auch das vergangene) und dir ziemlich einfach vorschläge unterbreiten. Natürlich kannst du github auch über Windows nutzen, nur kann ich dir persönlich besser helfen, wenn du vielleicht ein Linux-System benutzten würdest. Denn da sind es nach dem Erstellen des Accounts und dem manuellen Anlegen eines Repos auf github wirklich nur ein paar simple Kommandos.

  • @tjost - du hast doch einen validen Ansatz gefunden, also würde ich die Verständnisgrenze noch nicht ziehen :)
    Wenn Du vor der while true Schleife das aktuelle Fenster speicherst und innerhalb dann abgleichst, dann hast Du
    einen Punkt wo Du die Schleife abgebrochen wird also in etwa so

    Code
    previous_window_id = xbmcgui.getCurrentWindowId()
    while xbmcgui.getCurrentWindowId() == previous_window_id:
        ...

    Vorsicht: ich habe wieder Leerzeichen genutzt

    Cheers
    Claudia

  • Ok. ich habe jetzt den Boolean abgefragt ob der Player gerade ein "movie" abspielt.
    PlayerisMovies = xbmc.getCondVisibility("VideoPlayer.Content(movies)")
    dann in die Def eingefügt:

    Wenn ich mein Add On starte läuft alles und auch der Scrolltext geht wenn ich einen Film starte. Aber er bleibt wieder in der Schleife hängen. Wie kann ich der def jetzt sagen "if PlayerisMovies==False break"?

  • Du mußt deine Abfrage

    PlayerisMovies = xbmc.getCondVisibility("VideoPlayer.Content(movies)")

    z.B. als letztes in der while PlayerisMovies==True Schleife aufrufen
    damit bei jedem Schleifendurchlauf der neue Status ermittelt werden kann.

    Python
    while PlayerisMovies==True:
        ...
        PlayerisMovies = xbmc.getCondVisibility("VideoPlayer.Content(movies)")

    oder aber Du prüfst gleich am Anfang


    Python
    while xbmc.getCondVisibility("VideoPlayer.Content(movies)"):
        ...


    Da die Funktion getCondVisibility nur die Werte True (1) or False (0) zurück gibt und eine
    while Schleife nur ausgeführt wird wenn eine Bedingung True ist reicht das aus.


    Also


    Code
    while xbmc.getCondVisibility("VideoPlayer.Content(movies)"):
        ...
    
    
    ist gleich dem
    
    
    while xbmc.getCondVisibility("VideoPlayer.Content(movies)") is True:
        ...

    Ein Hinweis, True, False und None sind Singleton und sollten mit is geprüft werden.
    Auch hier wirst Du wahrscheinlich zu 99,9% nie in ein Problem laufen wenn Du mit == prüfst,
    solange Du nicht eine Bibliothek einbindest wo dieses auf einmal zum Thema wird.

    Cheers
    Claudia

  • Klar jetzt habe ich es auch verstanden.
    Frage ich den Inhalt von "PlayerisMovies==True:" ab dann bekommt er einmal ein ja und beim ersten durchlaufen der Schleife den Wert nicht noch mal. Frage ich aber in der Schleife ob der Wert existiert also mit while xbmc.getCondVisibility("VideoPlayer.Content(movies)"): bekommt er jedes mal beim Durchlaufen der Schleife den Wert. Dann geht es auch und der Text scrollt von rechts nach links. Recht langsam aber cool es geht.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!