Seite 1 von 1
Kursortasten
Verfasst: Donnerstag 7. September 2023, 20:14
von hubgra
Wie kann ich festellen, welche der Tasten "hoch, rechts, links, unten" (ich kann sie ja nicht hinschreiben) gerückt wurde?
Re: Kursortasten
Verfasst: Donnerstag 7. September 2023, 20:36
von __deets__
Unter welchem System, und unter welcher Umgebung (Kommandozeile, GUI, wenn ja, welche)?
Re: Kursortasten
Verfasst: Donnerstag 7. September 2023, 21:39
von sauterle
ich glaube das geht mit der keyboard bibliotek
keyboard.is_pressed("up"):
keyboard.is_pressed("down"):
keyboard.is_pressed("left"):
keyboard.is_pressed("right"):
gibt glaube ich jeweils einen bool wert
LG sauterle
Re: Kursortasten
Verfasst: Freitag 8. September 2023, 09:49
von hubgra
Code: Alles auswählen
import keyboard
i = keyboard.is_pressed("up")
j = keyboard.is_pressed("down")
k = keyboard.is_pressed("left")
l = keyboard.is_pressed("right")
print(i,j,k,l)
Ich nutze IDLE unter Windows 11. Die Ausgabe lautet: False, False, False, False,
Re: Kursortasten
Verfasst: Freitag 8. September 2023, 09:55
von __blackjack__
Dann war wohl keine der Tasten gedrückt als das Programm lief.
Re: Kursortasten
Verfasst: Freitag 8. September 2023, 10:22
von hubgra
So schnell war ich nicht, ich habe das probiert, da geschah nichts.
Re: Kursortasten
Verfasst: Freitag 8. September 2023, 10:29
von __deets__
So eine Abfrage ist nur sinnvoll, wenn sie in einer dauerhaften Schleife erfolgt.
Re: Kursortasten
Verfasst: Freitag 8. September 2023, 10:30
von Sirius3
Du mußt ein Programm schreiben, das in einer Schleife prüft, ob eine Taste gedrückt worden ist.
Was für ein Programm möchtest Du eigentlich schreiben?
Re: Kursortasten
Verfasst: Freitag 8. September 2023, 10:39
von hubgra
Ich habe ein python-Sudoku aus dem Netz bearbeitet, es zeigt das Spielfeld grafisch. Nun möchte ich mich mit den Kursotasten dort bewegen und ein Feld markieren, um etwas einzugeben.
Re: Kursortasten
Verfasst: Freitag 8. September 2023, 10:49
von hubgra
Code: Alles auswählen
import keyboard
def key():
w = True
while w:
if keyboard.is_pressed("up"):
w = False
return 'u'
if keyboard.is_pressed("down"):
w = False
return 'd'
if keyboard.is_pressed("left"):
w = False
return 'l'
if keyboard.is_pressed("right"):
w = False
return 'r'
c = key()
print(c)
Danke, es klappt.
Re: Kursortasten
Verfasst: Freitag 8. September 2023, 10:51
von __deets__
Das w ist quatsch, das return beendet die Funktion ohne das die Flagge nochmal ausgewertet wird.
Re: Kursortasten
Verfasst: Freitag 8. September 2023, 11:38
von Sirius3
@hubgra: das keyboard-Modul ist falsch. Das murkst in den Innereien des Betriebssystems rum.
Welches GUI-Rahmenwerk benutzt Dein Sudoku? Das bietet dann auch Methoden, um auf Tastendrücke zu reagieren.
Re: Kursortasten
Verfasst: Freitag 8. September 2023, 12:51
von __blackjack__
@hubgra: Die Funktion ist unnötig umständlich, mal abgesehen von dem unnötigen `w` und das man nicht am verwendeten GUI-Rahmenwerk vorbei programmiert.
Ungetestet:
Code: Alles auswählen
#!/usr/bin/env python3
import keyboard
def read_direction():
for key in iter(keyboard.read_key, object()):
if key in {"up", "down", "left", "right"}:
return key[0]
def main():
print(read_direction())
if __name__ == "__main__":
main()
Re: Kursortasten
Verfasst: Samstag 9. September 2023, 16:21
von hubgra
@__blackjack__
Was sollen die letzten 4 Zeilen? main() ruft eine Funktion auf, die ggf. wirklich aufgerufen wird.
Warum nicht direkt read_direction()?
Das habe ich gemacht (zuvor die letzten Zeilen auskommentiert), und es passierte: NICHTS
Re: Kursortasten
Verfasst: Samstag 9. September 2023, 16:30
von __blackjack__
@hubgra: Das Grundgerüst sieht immer so aus:
Code: Alles auswählen
#!/usr/bin/env python3
def main():
...
if __name__ == "__main__":
main()
Statt `main()` direkt `read_direction()` aufrufen hat keine Ausgabe, weil dann ja das `print()` fehlt. Das könnte man auch in den ``if``-Zweig stecken, aber dann lässt sich das nicht mehr von anderen Modulen aus aufrufen.
Re: Kursortasten
Verfasst: Samstag 9. September 2023, 17:37
von hubgra
Code: Alles auswählen
def read_direction():
for key in iter(keyboard.read_key, object()):
if key in {"up", "down", "left", "right"}:
print(type(key),key[0])
return(key[0])
print(read_direction())
Ich habe das mal ergänzt, es passiert immer noch nichts. Welchen Typ hat denn key und warum wird key[0] zurückgegeben?
Re: Kursortasten
Verfasst: Samstag 9. September 2023, 17:46
von __blackjack__
@hubgra: Na Du siehst doch den Test. `key` hat offensichtlich den Typ `str` damit das funktioniert. Und ``key[0]`` damit das gleiche zurückgegeben wird wie bei Deinem Code. Darum ging es doch: Code zu haben der kompakter ist und keine Wiederholungen enthält und das gleiche macht.
Ich habe das gerade mal getestet und bei mir funktioniert es.