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().