Seite 1 von 1

Tasten mit Curses auslesen

Verfasst: Samstag 25. November 2017, 11:15
von Chasey
Hallo,

ich hab das Problem, wenn ich tasten mit sdtscr.getch abfrage, dass ich es dann nicht schaffe es so zu programmieren, dass egal wie lange ich die Taste drücke es nur als ein druck gewertet wird.

Vielen Dank!

Re: Tasten mit Curses auslesen

Verfasst: Montag 27. November 2017, 19:11
von Sr4l
Da keiner Antwortet will ich mal meine Vermutung äußern: Ich vermute es geht nicht.

Bei GUI Toolkits kann man meist auf Key_down, Key_up events reagieren, das scheint bei curses zu fehlen. Und der Key wird dann mit der Anschalgsverzögerung des Betriebsystems? wiederholt.

Re: Tasten mit Curses auslesen

Verfasst: Montag 27. November 2017, 22:11
von snafu
Wenn ich das Problem richtig verstanden habe, dann suchst du wahrscheinlich sowas:

Code: Alles auswählen

def get_unique_items(getter):
    last_seen = object()
    while True:
        item = getter()
        if item != last_seen:
            last_seen = item
            yield last_seen
Habe hier mal eine abstrakte Form gewählt, weil man das natürlich auch für andere Dinge als nur für getch() benutzen kann. Der zu übergebende getter wäre hier halt getch().

Alternativ übrigens auch mit groupby() machbar:

Code: Alles auswählen

from itertools import count, groupby

def get_unique_items(getter):
    items = (getter() for _ in count())
    return (key for key, group in groupby(items))

Re: Tasten mit Curses auslesen

Verfasst: Dienstag 28. November 2017, 01:22
von snafu
Oder in einem Rutsch:

Code: Alles auswählen

unique_items = (
    key for key, group in groupby(iter(getter, object()))
)
Der Einsatz von object() dient übrigens dazu, eine Abbruchbedingung zu haben, die niemals erfüllt wird, ergo: eine Endlosschleife (iter() verhält sich in dieser Form wie ein while not). Durch den Einsatz eines Generators (die äußeren runden Klammern) ist es aber trotzdem möglich, eine begrenzte Menge an Elementen aus dieser Schleife zu holen, z.B. via islice().