Seite 1 von 1
Zeit bis Tastendruck messen
Verfasst: Mittwoch 11. Juli 2018, 00:35
von Atalanttore
Hallo
Ich wollte mittels `time()` die Zeit von Programmstart bis zum Betätigen der Leertaste messen, aber die Übergabe der Startzeit an die Zeitmessfunktion funktioniert nicht.
Der Code sieht so aus:
Code: Alles auswählen
import tkinter as tk
import time
def measure_key_press_time(event, start):
if event:
stop = time.time()
print(stop-start)
def main():
app_window = tk.Tk()
app_window.bind("<Escape>", lambda e: app_window.quit())
start = time.time()
app_window.bind("<space>", measure_key_press_time, start)
app_window.mainloop()
if __name__ == '__main__':
main()
Gruß
Atalanttore
Re: Zeit bis Tastendruck messen
Verfasst: Mittwoch 11. Juli 2018, 08:30
von __blackjack__
@Atalanttore: Schau Dir mal `functools.partial()` an. Dann musst Du allerdings die Reihenfolge der Argumente vertauschen die `measure_key_press_time()` erwartet. Oder verwende einen ``lambda``-Ausdruck.
`event` sollte übrigens immer ”wahr” sein, das ``if`` macht also keinen Sinn. Und sollte `event` dort nicht wahr sein, wird `stop` nicht definiert und Du bekämst deswegen gleich in der nächsten Zeile einen `NameError`.
Re: Zeit bis Tastendruck messen
Verfasst: Mittwoch 11. Juli 2018, 08:51
von Sirius3
Funktioniert nicht, ist eine sehr schlechte Fehlerbeschreibung. Was passiert denn?
Was sind die Parameter, die man an »bind« übergeben kann?
Re: Zeit bis Tastendruck messen
Verfasst: Mittwoch 11. Juli 2018, 11:18
von narpfel
Alternativ (ohne die Reihenfolge der Argumente zu vertauschen) geht auch
Ich würde auch eher `time.monotonic` oder `time.perf_counter` (oder die `*_ns`-Version aus Python 3.7) nehmen, damit es bei Uhrzeitänderungen keine Probleme gibt.
Re: Zeit bis Tastendruck messen
Verfasst: Donnerstag 12. Juli 2018, 17:22
von Atalanttore
Sirius3 hat geschrieben: Mittwoch 11. Juli 2018, 08:51
Funktioniert nicht, ist eine sehr schlechte Fehlerbeschreibung. Was passiert denn?
Es passiert gar nichts, weil bereits der Start mit einer Fehlermeldung abgebrochen wird.
Einen `lambda`-Ausdruck verwende ich lieber nicht, aber mit `functools.partial()` funktioniert es:
Code: Alles auswählen
import tkinter as tk
import time
from functools import partial
def measure_key_press_time(event, start):
stop = time.perf_counter()
print(stop-start)
def main():
app_window = tk.Tk()
app_window.bind("<Escape>", lambda a: app_window.quit())
start = time.monotonic()
app_window.bind("<space>", partial(measure_key_press_time, start=time.monotonic()))
app_window.mainloop()
if __name__ == '__main__':
main()
Gruß
Atalanttore
Re: Zeit bis Tastendruck messen
Verfasst: Donnerstag 12. Juli 2018, 19:24
von narpfel
@Atalanttore: `monotonic` und `perf_counter` zu mischen sieht für mich nach einem Fehler aus. Es wird nirgends garantiert, dass beide Funktionen die selbe Zeitquelle und den selben Referenzzeitpunkt verwenden.
Re: Zeit bis Tastendruck messen
Verfasst: Freitag 13. Juli 2018, 01:20
von Atalanttore
Stimmt, da habe ich den Code nicht wieder vollständig von meinen Versuchen befreit.
Gruß
Atalanttore