Plugin für eine gewisse Zeit anhalten

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Plugin für eine gewisse Zeit anhalten

      Hallo, ich möchte in einen Plugin zwischen Anweisungen wie Label anzeigen, anschließend soll eine interne Aktion gestartet werden, dann mal ein bild darstellen. dazwischen soll aber 3 Sekunden gewartet werden, leider funktioniert das mit "time.sleep" nicht wie ich mir das vorstelle, denn time.sleep wird dann ausgeführt wenn ich es nicht brauche, nämlich als erstes.
      Das Modul "eTimer" ist ja etwas anderes.
      Wie kann ich das ganze lösen?
    • Anhalten kannst ein Plugin nicht.
      Könntest aber nach einer Aktion einen Thread starten, der nach 3 Sekunden etwas macht.

      Source Code

      1. from threading import Timer,Thread
      2. self.thread = Timer(3,self.run)
      3. self.thread.start()
      4. def run(self):
      5. ...
      Rechtschreibfehler sind beabsichtigt und fördern ein genaueres Lesen
    • Wenn ich es aber in einer Methode verwende, dann klappt das mit den 3 Sekunden nicht. Dann müsste doch bevor die Info Box auf dem Bildschirm erscheint 3 Sekunden gewartet werden oder?

      Source Code

      1. .
      2. .
      3. .
      4. def message(self, aussage):
      5. self.session.open(MessageBox,_("%s" % aussage),MessageBox.TYPE_INFO)
      6. .
      7. .
      8. .
      9. def myfunktion(self):
      10. .
      11. .
      12. .
      13. self.thread = Timer(3,self.session.open(MessageBox,_("hello"),MessageBox.TYPE_INFO) )
      14. self.thread.start()
      15. .
      16. .
      17. .
      Display All
    • Dafür braucht man aber nicht unbedingt threads. Das geht auch simpler z.B. mit

      Source Code

      1. reactor.callLater(3, self.myfunktion)
      Scheduling tasks for the future — Twisted 17.9.0 documentation
      Ein kleines Dankeschön, durch eine Spende, nehme ich gerne an, PayPal oder Amazon-Gutschein an dhwz(at)gmx.net
      Falls ihr einen Real-Debrid oder Premiumize Zugang erwerbt dann verwendet bitte meine Partnerlinks um euch auch weiterhin die Funktion der Premiumanbieter gewährleisten zu können.
      Real-Debrid: http://real-debrid.com/?id=805285 Premiumize: https://www.premiumize.me/ref/363704208

      The post was edited 4 times, last by dhwz ().

    • Ich habe es jetzt mit "threading" hinbekommen.
      Hier die entscheidenden Code Abschnitte:


      Python Source Code

      1. from threading import Timer,Thread
      2. .
      3. .
      4. .
      5. def closer(self):
      6. self.close()
      7. def ausfuehren(self):
      8. anweisung1
      9. anweisung2
      10. self.thread = Timer(2,self.closer)
      11. self.thread.start()
      12. .
      13. .
      14. .
      Display All
      Sobald ich aber hinter self.thread = Timer(2,self.closer()) eine Parameter Klammer mache, wirkt der Timer nicht mehr.

      The post was edited 1 time, last by Satfan444 ().

    • Ich habe jetzt das Modul "reactor" mit einen ganz einfachen Plugin erfolgreich getestet.
      Aber wenn ich mehrere Funktionen mit "callback" Funktionien, "Messagebox" e.t.c. in dieses Plugin einbaue kommt immer die Fehlermeldung:

      Source Code

      1. 13:27:43.9481 { } /usr/lib/python2.7/site-packages/twisted/python/util.py:815 untilConcludes 2019-08-10 13:27:43+0200 [-] self.reactor.run()
      2. 13:27:43.9485 { } /usr/lib/python2.7/site-packages/twisted/python/util.py:815 untilConcludes 2019-08-10 13:27:43+0200 [-] File "/usr/lib/python2.7/site-packages/twisted/internet/base.py", line 1260, in run
      3. 13:27:43.9491 { } /usr/lib/python2.7/site-packages/twisted/python/util.py:815 untilConcludes 2019-08-10 13:27:43+0200 [-] File "/usr/lib/python2.7/site-packages/twisted/internet/base.py", line 1240, in startRunning
      4. 13:27:43.9498 { } /usr/lib/python2.7/site-packages/twisted/python/util.py:815 untilConcludes 2019-08-10 13:27:43+0200 [-] File "/usr/lib/python2.7/site-packages/twisted/internet/base.py", line 746, in startRunning
      5. 13:27:43.9507 { E } /usr/lib/python2.7/site-packages/twisted/python/util.py:815 untilConcludes 2019-08-10 13:27:43+0200 [-] twisted.internet.error.ReactorAlreadyRunning
      6. 13:27:43.9508 [ E ] python/python.cpp:210 call [ePyObject] (PyObject_CallObject(<bound method Session.processDelay of <__main__.Session instance at 0xb06c5350>>,()) failed)
      Was ist dabei zu beachten, was wo und wie darf man es innerhalb einer Funktion verwenden?
      Habe jetzt schon den ganzen Vormittag probiert.
      ich habe natürlich in der __init__ - Funktion es erst mit


      Python Source Code

      1. self.reactor = reactor
      initialisiert.
    • Hier jetzt mal mein Konktretes Beispiel wo die Box wegen "Runtimeerror" immer abstürtzt.

      Python Source Code

      1. from Screens.Screen import Screen
      2. from Plugins.Plugin import PluginDescriptor
      3. from Components.ActionMap import ActionMap
      4. from Components.Label import Label
      5. from Screens.MessageBox import MessageBox
      6. from twisted.internet import reactor
      7. class etimer(Screen):
      8. skin = """ <screen position="50,80" size="1460,900" title="mein start script plugin" >
      9. <widget name="menu" position="10,60" size="4000,1000" font="Regular;20"/>
      10. </screen>"""
      11. def __init__(self, session):
      12. self.session = session
      13. liste =["du bist mein etimer"]
      14. Screen.__init__(self, session)
      15. self["menu"] = Label()
      16. self["myActionMap"] = ActionMap(["SetupActions"],{"ok": self.myMsg, "cancel":self.close})
      17. self.reactor = reactor
      18. def myMsg(self):
      19. self.openmymessage = self.session.open(MessageBox,_("hello"),MessageBox.TYPE_INFO)
      20. self.reactor(5, self.openmymessage)
      21. self.reactor.run()
      Display All
    • Ich habe das ganze jetzt nochmal überarbeitet, aber gleicher Fehler:

      Python Source Code

      1. from Screens.Screen import Screen
      2. from Plugins.Plugin import PluginDescriptor
      3. from Components.ActionMap import ActionMap
      4. from Components.Label import Label
      5. from Screens.MessageBox import MessageBox
      6. from twisted.internet import reactor
      7. class etimer(Screen):
      8. skin = """ <screen position="50,80" size="1460,900" title="mein start script plugin" >
      9. <widget name="menu" position="10,60" size="4000,1000" font="Regular;20"/>
      10. </screen>"""
      11. def __init__(self, session):
      12. self.session = session
      13. Screen.__init__(self, session)
      14. self["menu"] = Label()
      15. self["myActionMap"] = ActionMap(["SetupActions"],{"ok": self.myMsg, "cancel":self.close})
      16. def mess(self):
      17. self.openmymessage = self.session.open(MessageBox,_("hello"),MessageBox.TYPE_INFO)
      18. def myMsg(self):
      19. reactor.callLater(5, self.mess)
      20. reactor.run()
      Display All
    • @Satfan444
      Du sollst/darfst da keinen eigenen Reactor starten du sollst/musst den von Enigma2 verwenden.
      Also auf keinen fall irgendwas mit reactor.run() ausführen das ist überhaupt nicht nötig, der E2 Reactor ist permanent am laufen.

      Du führst NUR reactor.callLater(5, self.mess) aus mehr nicht.
      Ein kleines Dankeschön, durch eine Spende, nehme ich gerne an, PayPal oder Amazon-Gutschein an dhwz(at)gmx.net
      Falls ihr einen Real-Debrid oder Premiumize Zugang erwerbt dann verwendet bitte meine Partnerlinks um euch auch weiterhin die Funktion der Premiumanbieter gewährleisten zu können.
      Real-Debrid: http://real-debrid.com/?id=805285 Premiumize: https://www.premiumize.me/ref/363704208

      The post was edited 1 time, last by dhwz ().