Werte für Variablen neu setzen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Werte für Variablen neu setzen

      Hallo Zusammen,

      ich baue mir gerade einige eigene Skinparts (bzw. baue vorhandene Skinparts um usw.). Dabei habe ich zum Beispiel die Uhr in einem Skinpart definiert und möchte diese dann in den relevanten Screenparts immer wieder per panel (ginge natürlich auch per constant-widgets, aber die kann OSD ja nicht verarbeiten) aufrufen. In den Positionsangeben der Uhr habe ich Variablen verwendet. Die Idee ist nun diese Variablen in jedem Skinpart, der die Uhr verwenden soll, mit den für den jeweiligen Skinpart erforderlichen Positionswerten neu zu füllen. Das bedeutet am Anfang des Skinparts definiere ich die Variablen jeweils mit den zum Skinpart passenden Werten neu.
      Leider funktioniert das aber nicht in der gewünschten Weise. Wenn die Variablen z.B. in der Infobar gesetzt werden, wird die Uhr ordnungsgemäß platziert. Rufe ich aber z.B. die SIB auf, wird die Uhr an der selben Position angezeigt, wie in dem Screen Infobar. Offenbar werden die Variablen beim ersten Aufruf gesetzt und dann nicht wieder überschrieben. Ist das soweit richtig beobachtet?
      Fall ja gibt es einen Trick oder Workaround, das Neuschreiben der Variablen zu erzwingen?

      Danke im Voraus für Tips und Anregungen.
      Sonnige Grüße aus Bremen



      Die reinste Form des Wahnsinns ist es, alles beim Alten zu lassen und gleichzeitig zu hoffen, dass sich etwas ändert.

      - Albert Einstein -
    • Ich kann dir da zwar nicht helfen, aber ich persöhnlich finde es schöner, wenn solche Elemente wie die Uhr immer an der selben Stelle sind. Natürlich nur im Bezug auf die gleiche Fenstergröße.
      Also bei IB und SIB an der selben Stelle und bei Vollbild auch immer an der selben Stelle.
      Deshalb würde ich da nicht mit Variablen arbeiten, sondern für die verschiedenen Fentergrößen eigene Uhr-Skinparts machen. So viele verschiedene Fenstergrößen wirst ja nicht haben, denke ich.
      ---------------------------------------------------------------------------------------


      Anleitung für den SerienRecorder SerienRecorder Martins FHD SR-Skin

      Mediathekvieweb ----- SRF Mediathek
    • Herzlichen Dank für Deine Anregungen.
      Es stimmt, so viele verschiedene Fenstergrößen wird es nicht geben. Allerdings sind gerade die IB und die SIB unterschiedlich groß. Natürlich ist das ganze jetzt kein Showstopper. Im Moment kopiere ich die Uhr-Widgets einfach mit den angepassten Positionsangaben in den jeweiligen Screen hinein. Sind am Ende ja auch nur 10 Zeilen. Deshalb ist das Uhr-Beispiel wahrscheinlich kein besonders gutes Beispiel. Aber es sind ja durchaus auch Anwendungsfälle denkbar, wo der Weg über die Variablen der elegantere wäre.

      @schomi
      Danke für Deinen Tip.
      Das würde aber ja keinen Vorteil bringen. Ich habe die Uhr in einem Skinpart definiert und die Positionsangaben durch Variablennamen ersetzt. Wenn ich die Uhr jetzt mittels panel z.B. in meiner IB aufrufe, wird die ja mit den vorher gesetzten Variablennamen aufgerufen. Und wenn ich für jeden Screen neue Variablen definiere, kann ich die widgets ja gleich in den jeweiligen Screen direkt reinschreiben.

      Oder habe ich Dich gerade falsch verstanden?
      Sonnige Grüße aus Bremen



      Die reinste Form des Wahnsinns ist es, alles beim Alten zu lassen und gleichzeitig zu hoffen, dass sich etwas ändert.

      - Albert Einstein -
    • Das könntest du evtl. mit einer Programmierung hinbekommen.

      Am Ende des Uhr-Panels muss dazu das folgende Applet eingebaut werden

      Quellcode

      1. <applet type="onLayoutFinish">
      2. try: globals()["clockInstance"] = self.instance
      3. except: pass
      4. </applet>
      Den Applet-Code dazu direkt vor </screen> einbauen.
      WICHTIG: Im Code dürfen links keine Leerzeichen stehen.


      In deinen Skinparts muss dann ebenfalls vor </screen> dieser Code stehen

      Quellcode

      1. <applet type="onLayoutFinish">
      2. from enigma import ePoint
      3. try: globals()["clockInstance"].move( ePoint(10,20) )
      4. except: pass
      5. </applet>
      Im Beispiel habe ich die Position 10, 20 eingetragen. Hier müssen dann die gewünschten Werte rein.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Oberhesse ()

    • Hallo Oberhesse,

      vielen Dank für Deine Mühe. Ich kann das leider erst heute Abend testen, denke aber, dass das nicht funktionieren wird, da meine Uhr aus insgesamt vier widgets mit unterschiedlichen Positionen besteht.
      Ich vermute, dass der Compiler nach der Positionsangabe in der neu definierten clockInstance suchen und dann vier solcher Angaben finden wird. Ich denke damit wird er Schwierigkeiten haben.
      Sonnige Grüße aus Bremen



      Die reinste Form des Wahnsinns ist es, alles beim Alten zu lassen und gleichzeitig zu hoffen, dass sich etwas ändert.

      - Albert Einstein -
    • Die Variable wird direkt beim Aufbau des Panels neu gesetzt (kurz vor dem Einblenden), daher verweist die Variable auf das Panel, das im jeweiligen Skinpart eingetragen ist.
      Es lassen sich natürlich auch unterschiedliche Variablen nutzen ("clockInstance1" oder "clockInstance2").
    • @Oberhesse

      Sorry für die späte Rückmeldung.

      Ich habe das jetzt nochmal detailliert getestet und das funzt einwandfrei. Wie gesagt besteht die Uhr aus vier widgets, deren Positionsangaben in Relation zueinander natürlich stimmen müssen. Ich habe die Variablen einmal mit Werten gefüllt, so dass die Positionierung optisch passt und habe Deine Applets mit der einen Instanz eingebaut. Das führt am Ende tatsächlich dazu, dass alle vier Positionsangaben in dem aufgerufenen Uhr-Panel um die im Applet angegebenen Werte verändert werden und die Uhr damit insgesamt an eine andere Position verschoben wird und zwar so, dass die relativen Positionen der einzelnen Widgets zueinander immer noch passen.
      Das ist sogar noch um Klassen besser, als alle Variablen neu bestimmen und befüllen zu müssen, da man hier lediglich die Verschiebung angeben muss.

      Ich bin mir sicher, dass das den Einen oder Anderen Skinner hier im Forum ebenfalls interessieren könnte.

      Ich bin mir natürlich auch sicher, dass Du das vorher gewusst hast, aber ich bin gerade schwer begeistert.

      Danke nochmals für Deine Unterstützung.


      Edit:
      War leider zu voreilig. Mit dieser Methode wird der komplette Screen verschoben in dem z.B. die Uhr aufgerufen und das Applet integriert wird. Keine Ahnung warum ich das vorhin nicht bemerkt habe, war wahrscheinlich zu sehr von dem eleganten "Lösungsweg" geblendet.
      Sonnige Grüße aus Bremen



      Die reinste Form des Wahnsinns ist es, alles beim Alten zu lassen und gleichzeitig zu hoffen, dass sich etwas ändert.

      - Albert Einstein -

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von larihinz ()