Wie am einfachsten <components> parts aus skin.xml auslesen

  • Frage an die Dream Skin Programmierer.


    Ich suche einen einfachen Weg um mir aus der vom System benutzten "skin.xml" aus der Section

    <components>


    Code
    # part aus skin.xml
    
    <components>
    
            <component type="MediaplayerPlayList" itemHeight="25" iconHPos="2" iconHeight="20" iconWidth="40" itemWidth="900"/>
            <component type="FileList" itemHeight="30" textX="50" textY="0" textWidth="1000" textHeight="30" pixmapWidth="30" pixmapHeight="30"/>
    
    </components>

    jeweils die Parameter "itemheight" für "MediaplayerPlayList" und "FileList" auszulesen?


    Für die Programme selbst die das nutzen kann es auch nicht so aufwändig sein.


    Kleines Beispiel wäre schön.


    /Willi/

  • Das verarbeitet schon die skin.py, wo du es dann nur abfragen musst.

    Python
    from skin import componentSizes
    
    sizes = componentSizes["MediaplayerPlayList"]
    itemHeight = sizes.get("itemHeight", 30)

    Der Wert nach dem Komma ist dabei ein default-Wert, falls kein itemHeight im Component hinterlegt ist.

    Das gleiche dann eben nur für die FileList nochmal ;)

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

    Edited once, last by Sven H ().

  • Hallo Sven,


    so einfach ist es wohl doch nicht in der ONE:


    Python
        from skin import componentSizes
    
        sizes = componentSizes("MediaPlayerPlayList")
        itemHeight = componentSizes.itemHeight(self.SKIN_COMPONENT_KEY, 23)
        print ("xxxxxxxxxxxxxxxxxxxxxxxxxx", itemHeight)


    Folgende Python Fehlermeldung:


    Code
    Screen <class 'Plugins.Extensions.MediaPlayer.plugin.MediaPlayer'>((), {}): <type 'exceptions.AttributeError'>
    Traceback (most recent call last):
      File "/usr/lib/enigma2/python/mytest.py", line 385, in create
        return screen(self, *arguments, **kwargs)
      File "/usr/lib/enigma2/python/Plugins/Extensions/MediaPlayer/plugin.py", line 294, in __init__
        sizes = componentSizes("MediaPlayerPlayList")
    AttributeError: ComponentSizes instance has no __call__ method


    Was ich in "Components.MediaPlay" gefunden habe ist folgendes:


    Ich kann allerdings mit dem Code nicht so viel anfangen


    Hast Du noch einen Tipp?


    /Willi/

  • Edit:

    Sorry, hab gerade gesehen, dass mein Code einen kleinen Fehler hatte :rolleyes:

    Da müssen in der 2. Zeile eckige Klammern hin, nicht runde.

    Der Componenname war bei mir auch nicht korrekt - kleines p bei player ;) - hab es im Post #1 auch noch korrigiert.

    Python
    from skin import componentSizes
    sizes = componentSizes["MediaplayerPlayList"]
    itemHeight = sizes.get("itemHeight", 30)

    Bei itemHeight/itemWidth kannst du es auch mit einer Zeile machen ;) (bei anderen Werten müsstest du es wie oben machen)

    Python
    from skin import componentSizes
    itemHeight = componentSizes.itemHeight("MediaplayerPlayList", 30)

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

    Edited 7 times, last by Sven H ().

  • Hallo Sven,


    funktioniert - Vielen Dank!


    Da stell ich fest, dass mir doch noch viele Python Grundlagen fehlen.


    Aber es wird!


    /Willi/


    Hallo Sven,


    Noch eine Verständnisfrage:


    wenn ich mit


    Code
    componentSizes["MediaplayerPlayList"]["itemHeight"] = 30


    im MediaPlayer den Wert überschreibe - sind davon auch andere Programme betroffen?


    /Willi/

    Edited once, last by willi.neu9: Ein Beitrag von willi.neu9 mit diesem Beitrag zusammengefügt. ().

  • im MediaPlayer den Wert überschreibe - sind davon auch andere Programme betroffen?

    Ich weiß nicht, ob diese konkrete Size sonst jemand nutzt.

    Wenn ja, dann wirkt sich das natürlich auch an anderen Stellen aus.


    Der Aufruf würde übrigens crashen wenn es MediaplayerPlaylist nicht explizit im skin gibt, das sollte man vorab prüfen.


    Generell rate ich aber dringend davon ab programmatisch ComponentSizes zu verbiegen.

    Sie wurden geschaffen damit man es im Skin anpassen kann.

    In dem Fall wäre da eventuell eine skin_user.xml in /etc/enigma interessant

    mfg ,
    Reichi