Ich würde gerne, wenn 5 Minuten nichts geklickt wird auf dem Touchscreen, auf diesem ein Bild anzeigen lassen.
Ich kann dies nicht über den Screensaver machen da ich diesen nach weitern 5 Minuten aktivieren möchte

Kann mir jemand helfen?
ich habe hier leider kein python installiert, darum kann ich den Code nicht testen. Aber ich meine das in etwa so (nur für das Problem wichtiger Code):schnibli hat geschrieben:Meinst du das ich bei jedem Button klick
last_action_time = 0 setzten muss?
Wie kann ich wie löse ich das mit dem Timer![]()
Code: Alles auswählen
import Tkinter as tk
import time
class MainWindow(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.last_action_time = 0
self.last_action_time_poll_interval = 1000 # 1000 ms min. Zeit zwischen zwei Aufrufen
self.last_action_delay = 300 # 300 s, bevor die Methode self.handle_action aufgerufen wird
self._last_action_time_checker()
def _last_action_time_checker(self):
if self.last_action_time:
if (time.time - self.last_action_time) > self.last_action_delay:
self.last_action_time = 0 # Sicherstellen, dass die Aktion nur einmal pro Ablauf ausgeführt wird
self.handle_action()
self.after(self.last_action_time_poll_interval, self._last_action_time_checker)
def handle_action(self):
"Handle action after n seconds"
def any_callback(self, event=None):
self.last_action_time = time.time # setzt den Counter auf die aktuelle Zeit hoch -> Differenz = 0
Code: Alles auswählen
self.last_action_time = time.time() # setzt den Counter auf die aktuelle Zeit hoch -> Differenz = 0
welchen event Handler meinst Du? Wenn ich schnibli richtig verstanden habe, soll das Bild nach 5 Minuten angezeigt werden, wenn gerade nichts passiert ist (keine Bewegung und kein Tastendruck). Wie würdest Du das ohne Polling machen?jens hat geschrieben:Ich denke mal sollte besser per event handler schauen wann sich zuletzt die Maus bewegt und wann zulest eine taste gedrückt wurde...
Ok, und in wie weit unterscheidet sich das von meinem Vorschlag?jens hat geschrieben:Demnach würde ich "Motion", "KeyPress" und "Configure" (Fenster verschieben) benutzten. Das sollte genug an Aktivität zeigen.
Ein event-Handler, der dann nur self.last_action_time = time.time() setzt.
Dann mit .after() regelmäßig prüfen, ob 5 Min schon vorbei sind.
... oder ein Bild seiner Freundin.BlackJack hat geschrieben:Manchmal hat man ja auch Software die wenn nichts passiert nach einer gewissen Zeit in einen Demomodus wechselt, der dem Benutzer verschiedene Möglichkeiten aufzeigt.
Code: Alles auswählen
import tkinter as tk
import time
class MainWindow(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.last_action_time = 0
self.last_action_time_poll_interval = 1000 # 1000 ms min. Zeit zwischen zwei Aufrufen
self.last_action_delay = 10 # 300 s, bevor die Methode self.handle_action aufgerufen wird
self._last_action_time_checker()
def _last_action_time_checker(self):
if self.last_action_time:
if (time.time() - self.last_action_time) > self.last_action_delay:
self.last_action_time = 0 # Sicherstellen, dass die Aktion nur einmal pro Ablauf ausgeführt wird
self.handle_action()
self.after(self.last_action_time_poll_interval, self._last_action_time_checker)
def handle_action(self):
print("hallo ich bin fertig")
def any_callback(self, event=None):
self.last_action_time = time.time() # setzt den Counter auf die aktuelle Zeit hoch -> Differenz = 0
Code: Alles auswählen
try:
import tkinter as tk
except:
import Tkinter as tk
import time
class MainFrame():
def __init__(self):
tk.Tk.__init__(self)
self.last_action_time = 0
self.last_action_time_poll_interval = 1000 # 1000 ms min. Zeit zwischen zwei Aufrufen
self.last_action_delay = 10 # 300 s, bevor die Methode self.handle_action aufgerufen wird
self._last_action_time_checker()
def _last_action_time_checker(self):
if self.last_action_time:
if (time.time() - self.last_action_time) > self.last_action_delay:
self.last_action_time = 0 # Sicherstellen, dass die Aktion nur einmal pro Ablauf ausgeführt wird
self.handle_action()
self.after(self.last_action_time_poll_interval, self._last_action_time_checker)
def handle_action(self):
print("hallo ich bin fertig")
def any_callback(self, event=None):
self.last_action_time = time.time() # setzt den Counter auf die aktuelle Zeit hoch -> Differenz = 0
print ("Programm beendet")
Code: Alles auswählen
self.after(self.last_action_time_poll_interval, self._last_action_time_checker)
Code: Alles auswählen
AttributeErrot: 'MainFrame' object has no attribute 'after'