Seite 1 von 1

keyboard Modul funktioniert nicht richtig für Tasteneingabe

Verfasst: Mittwoch 6. Oktober 2021, 20:13
von gomez72
Hallo,
ich versuche dem User seine Eingabe in einer CLI Anwendung zu erleichtern.
Er soll mit den Tasten "+" und "-" eine Jahreszahl schrittweise ändern können.
Mein Problem ist, dass das Eingabeverhalten für mich nicht ​nachvollziehbar ist.

Erst muss der User 2 mal "die Taste +" drücken damit sich etwas ändert. Später funktioniert es aber dann schrittweise richtig und wenn ich dann "-" drücke ist es wieder ok und später dann wieder nicht. Sprich das Eingabeverhalten fühlt sich am Ende nach "Gummi" an bzw stolpert. Warum zählt er nicht einfach +1 rauf und -1 runter. Irgendetwas verschluckt sich da ?!

Kennt von euch jemand dieses Problem und hat einen Tipp oder kann von ähnlichen Erfahrungen berichten ?
Benutze alles in einer Windows Umgebung.

VG gomez_

hier der Code:

Code: Alles auswählen

    def saison_change(self):
        IO.print_seeding_saison()
        print(self.saison, " (+)(-) - übernehmen (x)")

        keyboard.read_key()
        while keyboard.read_key() != "x":
            if keyboard.read_key() == "+":
                time.sleep(0.15)
                self.saison = self.saison + 1
                self.print_title_and_user()
                IO.print_seeding_saison()
                print(self.saison, " (+)(-) - übernehmen (x)")
            elif keyboard.read_key() == "-":
                self.saison = self.saison - 1
                self.print_title_and_user()
                IO.print_seeding_saison()
                print(self.saison, " (+)(-) - übernehmen (x)")

Re: keyboard Modul funktioniert nicht richtig für Tasteneingabe

Verfasst: Mittwoch 6. Oktober 2021, 20:38
von Sirius3
Du hast sehr viele `keyboard.read_key`, und bei jedem Aufruf wird gewartet, bis eine Eingabe kommt. Es darf also in der gesamten Schleife nur einen Aufruf geben.
`keyboard` ist übrigens das falsche Modul, weil es alle Tastendrücke abfängt. Du suchst wahrscheinlich msvcrt.getch.

Code: Alles auswählen

    def saison_change(self):
        while True:
            IO.print_seeding_saison()
            print(self.saison, " (+)(-) - übernehmen (x)")
            character = msvcrt.getch()
            if character == "x":
                break
            elif character == "+":
                self.saison += 1
            elif character == "-":
                self.saison -= 1
            self.print_title_and_user()

Re: keyboard Modul funktioniert nicht richtig für Tasteneingabe

Verfasst: Mittwoch 6. Oktober 2021, 20:55
von gomez72
Sirius3 hat geschrieben: Mittwoch 6. Oktober 2021, 20:38 Du suchst wahrscheinlich msvcrt.getch.
Hallo, vielen Dank für deine schnelle Antwort. Ich war so frei und habe den Code gleich eingebaut.
Bei mir tut sich allerdings nach dem print dann überhaupt nichts.

Könntest Du mir da nochmal behilflich sein `?!

Re: keyboard Modul funktioniert nicht richtig für Tasteneingabe

Verfasst: Mittwoch 6. Oktober 2021, 21:51
von Sirius3
Was soll sich denn wo tun?

Re: keyboard Modul funktioniert nicht richtig für Tasteneingabe

Verfasst: Mittwoch 6. Oktober 2021, 21:59
von gomez72
probier mal deinen Code aus. er funktioniert leider nicht.

Re: keyboard Modul funktioniert nicht richtig für Tasteneingabe

Verfasst: Mittwoch 6. Oktober 2021, 22:39
von __blackjack__
@gomez72: Blick in die Dokumentation von `msvcrt.getch()` verrät, dass die Funktion Bytes liefert. Also musst Du auch mit Bytes vergleichen, denn eine Zeichenkette ist nie gleich einem `bytes`-Objekt.

Edit: Oder Du verwendest `msvcrt.getwch()` stattdessen.