Bei meinem aktuellen Übungsprojekt geht es um die Reaktion des Benutzers. Aus einer Liste wird jede Sekunde zufällig eine Farbe für den Bildschirmhintergrund ausgewählt und geändert. Sobald der Bildschirmhintergrund rot wird, soll die Startzeit gespeichert und die Reaktionszeit bis der Benutzer die Leertaste drückt in einer Liste gespeichert werden.
Mehrere Sachen funktionieren leider nicht:
- In die Liste wird immer etwas geschrieben, egal ob Tastendruck oder nicht.
- Der in der Liste geschriebene Wert ist viel zu niedrig für eine Reaktionszeit.
Code: Alles auswählen
import tkinter as tk
from random import choice
import time
switch_time = 1000
reaction_times = []
class Application:
def __init__(self, app_win):
self.app_win = app_win
self.width = app_win.winfo_screenwidth()
self.height = app_win.winfo_screenheight()
self.colors = ["green", "red", "blue", "yellow", "black"]
self.current_color = "red"
self.color = ""
self.canvas = tk.Canvas(app_win, width=self.width, height=self.height,
highlightthickness=0)
self.canvas.pack()
self.change_bg_color(self.current_color)
def change_bg_color(self, current_color):
global reaction_times
self.color = choice(self.colors)
while self.color == current_color:
self.color = choice(self.colors)
if self.color == "red":
self.start_time = time.monotonic()
print("Startzeit:", self.start_time)
if self.key_pressed() == True:
print("Rot und Taste gedrückt bei Stoppzeit:", time.monotonic())
reaction_time = time.monotonic() - self.start_time
reaction_times.append(reaction_time)
print(reaction_times)
self.canvas.config(bg = self.color)
self.app_win.after(switch_time, self.change_bg_color, self.color)
def key_pressed(self):
return True
def main():
app_win = tk.Tk()
app_win.attributes("-fullscreen", True)
app_win.bind("<Escape>", lambda e: app_win.quit())
app = Application(app_win)
app_win.bind("<space>", lambda e: app.key_pressed())
app_win.mainloop()
if __name__ == '__main__':
main()
Atalanttore