Wie programmiert man in Python, dass "q" das Fenster schließt?

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()
QuestionTag666 
Fragesteller
 14.07.2021, 10:04

Danke für die Antwort, ich hatte eigentlich alles wie du geschrieben hast, nur muss ich jetzt noch das global einfügen.

0

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)
Woher ich das weiß:Studium / Ausbildung