Wo muss ich suchen?
Wenn ich es richtig verstehe, dann kann irgendetwas in einer Liste beim Beenden des Dialogs nicht gefunden werden.
Aber was?
mfg
Dietmar
def askDeepStandby(self): self.session.openWithCallback( self.choiceCallbackYN, MessageBox, _("Go to sleep now?"), type = MessageBox.TYPE_YESNO, timeout = 60) def choiceCallbackYN(self, result): print pluginPrintname, "result", result if result: self.doDeepStandby(1) else: result = 60 # 60 Minuten spaeter config_wakeup = self.clkToDatetime(config.plugins.simplepowersaver.wakeup) config_sleep = self.clkToDatetime(config.plugins.simplepowersaver.sleep) if config_sleep < config_wakeup: config_sleep += timedelta(days=1) print pluginPrintname, "config_wakeup", config_wakeup print pluginPrintname, "config_sleep", config_sleep self.DeepStandbyVerzoegerung = self.total_seconds(datetime.now() - config_sleep) / 60 print pluginPrintname, "self.DeepStandbyVerzoegerung", self.DeepStandbyVerzoegerung self.DeepStandbyVerzoegerung += result print pluginPrintname, "self.DeepStandbyVerzoegerung", self.DeepStandbyVerzoegerung
Traceback (most recent call last): File "/usr/lib/*******/python/mytest.py", line 185, in processDelay self.current_dialog.doClose() File "/usr/lib/*******/python/Screens/Screen.py", line 113, in doClose File "/usr/lib/*******/python/Screens/InfoBarGenerics.py", line 1814, in __removeNotifications ValueError: list.remove(x):
eigentlich habe ich vor die Idee des Timers der Messagebox in eine Klasse ChoiceBoxTimer zu integrieren: s.u.
Dazu habe ich von Klasse ChoiceBox folgendermaßen abgeleitet. Kompilieren ist möglich. Ich habe aber Probleme mit dem Aufruf: ChoiceBox wird so aufgerufen:
lst = [(' At once', 0)] lst.append((' 30 ' + _('minutes'), 30)) lst.append((' 60 ' + _('minutes'), 60)) lst.append(('120 ' + _('minutes'),120)) dei = self.session.openWithCallback(self.choiceCallback, ChoiceBox, title=_("Deepstandby now or go down later?"), list=lst) dei.setTitle(_("Simple Power Saver"))
da dachte ich, dass ChoiceBoxTimer dann einfach so aufgerufen werden kann (zusätzlicher Parameter timeout): Der Aufruf endet mit einem Greenscreen. Kann jemand bestätigen, dass meine Gedanken richtig sind? Ich glaube, ich habe das mit den *arguments und **kwargs in enigma2 noch nicht richtig verstanden. Wenn ich das Problem hier richtig verstehe, kann in mytest.py die Klasse ChoiceBoxTimer nicht instanziert werden und dann kommt die Fehlermeldung ,dass
dlg.isTmp = True
kein Attribut isTmp hat. Ich habe im Moment keinen Chrash-log. Liefere ich nach. Vielleich kann ja auch so jemand helfen.
lst = [(' At once', 0)] lst.append((' 30 ' + _('minutes'), 30)) lst.append((' 60 ' + _('minutes'), 60)) lst.append(('120 ' + _('minutes'),120)) dei = self.session.openWithCallback(self.choiceCallback, ChoiceBox, title=_("Deepstandby now or go down later?"), list=lst, timeout=60) dei.setTitle(_("Simple Power Saver"))
Code der Klasse ChoiceBoxTimer:
from Screens.ChoiceBox import ChoiceBox class ChoiceBoxTimer(ChoiceBox): def __init__(self, session, title = "", list = [], keys = None, selection = 0, skin_name = [], timeout = -1): ChoiceBox.__init__(self, session, title, list, keys, selection, skin_name) self.initTimeout(timeout) def initTimeout(self, timeout): self.timeout = timeout if timeout > 0: self.timer = eTimer() self.timer.callback.append(self.timerTick) self.onExecBegin.append(self.startTimer) self.origTitle = None if self.execing: self.timerTick() else: self.onShown.append(self.__onShown) self.timerRunning = True else: self.timerRunning = False def __onShown(self): self.onShown.remove(self.__onShown) self.timerTick() def startTimer(self): self.timer.start(1000) def stopTimer(self): if self.timerRunning: del self.timer self.onExecBegin.remove(self.startTimer) self.setTitle(self.origTitle) self.timerRunning = False def timerTick(self): if self.execing: self.timeout -= 1 if self.origTitle is None: self.origTitle = self.instance.getTitle() self.setTitle(self.origTitle + " (" + str(self.timeout) + ")") if self.timeout == 0: self.timer.stop() self.timerRunning = False self.timeoutCallback() def timeoutCallback(self): print "Timeout!" self.ok()