Wie programmiert man in Python, dass "q" das Fenster schließt?
Hallo,
ich bin neu in Python und wollte fragen, wie man bei einem Turtle Screen das Fenster schließt, sobald man "q" drückt. Ich habe es versucht mit screen.onkeypress(quitg, "q") und dann eine Funktion, die quitgame zu True umschaltet. Im Game Loop if quitgame == True: break. Aber irgendwie geht das nicht. Ich benutze Python 3.8
2 Antworten
Bei so einer Implementation gibt es mehrere Stolpersteine, über die du fallen könntest.
Zuerst zur Registrierung eines Key Events:
import turtle
def quit_game():
# quit game ...
screen = turtle.Screen()
screen.onkeypress(quit_game, "q")
screen.listen()
Auf Events wird nur gelauscht, wenn du explizit die listen-Methode aufrufst. Sie fokussiert den Bildschirm, sodass Tastaturereignisse aufgefangen werden können.
Wenn du eine globale Variable innerhalb einer Funktion ändern möchtest, benötigst du das Schlüsselwort global. Das macht die globale Variable für den Funktionskontext bekannt. Ohne diese Bekanntmachung würde die Funktion einfach eine eigene lokale Variable anlegen.
should_quit = False
def quit_game():
global should_quit
should_quit = True
Deine Endlosschleife wiederum blockiert den Programmfluss und verhindert das Abfangen eines Events. Je Iterationsschritt muss also einmal die update-Methode aufgerufen werden, damit der Screen einen neuen Status ermitteln kann.
while True:
screen.update()
Aber womöglich brauchst du auch keine Schleife. Angenommen, du hättest ein Programm, welches nur mit Tastenereignissen arbeitet, würde es ausreichen, das Programm mit
screen.mainloop()
offen zu halten.
Zuletzt noch ein komplettes Beispiel für deine beschriebene Anforderung:
import turtle
should_quit = False
def quit_game():
global should_quit
should_quit = True
screen = turtle.Screen()
screen.onkeypress(quit_game, "q")
screen.listen()
while True:
if should_quit:
break
screen.update()
Danke für die Antwort, ich hatte eigentlich alles wie du geschrieben hast, nur muss ich jetzt noch das global einfügen.
Es gibt viele gute Libraries die du nutzen kannst. Pynput ist Beispielsweise sehr simpel.
Oder einfach über die keyboard library:
import keyboard
while True:
if keyboard.is_pressed("q"):
quit(0)