Tasten input darstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Sedi.py
User
Beiträge: 4
Registriert: Donnerstag 29. Juni 2017, 08:32

Hey,

für mein Projekt würde ich gern gedrückte Tasten darstellen lassen. Es darf jedoch kein Fenster dafür benötigt werden. Ich bin dabei auf pynput gestoßen und mit dem Code funktioniert die Tastenerkennung schon sehr gut:

Code: Alles auswählen

from pynput import keyboard

def on_press(key):
    
    try:
        print('alphanumeric key {0} pressed'.format(
            key.char))
    except AttributeError:
        
        print('special key {0} pressed'.format(
            key))
    
    return key



def on_release(key):
    print('{0} released'.format(
        key))
    if key == keyboard.Key.esc:
        # Stop listener
        return False





def main (key):

    pressed_key= (on_press(key))
    print(pressed_key)

if __name__ =="__main__":
    main(key)




# Collect events until released
with keyboard.Listener(
        on_press=on_press,
        on_release=on_release,
        main = main ) as listener:
    listener.join()
 
das Problem ist nur, dass die Tasten ausschließlich in der on_press Funktion erkannt bzw. ausgegeben werden. Ich würde jedoch gerne mit diesen in der main weiter arbeiten bzw. sie ausgeben lassen. Schwer zu beschreiben, also die on_press-Funktion soll nur eine gedrückte Taste erkennen und an die main übergeben.

Hat jemand dazu Ideen oder Gedanken?
Vielen Dank schon einmal!
:)
Zuletzt geändert von Anonymous am Sonntag 2. Juli 2017, 23:10, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@Sedi.py: Entweder musst Du das so benutzen wie die API nun mal ist, oder Du musst das zum Beispiel über eine `Queue` in den Hauptthread bringen.
Sedi.py
User
Beiträge: 4
Registriert: Donnerstag 29. Juni 2017, 08:32

Hey, danke für die Antwort!

Wie meinst du das mit der Queue? Hast du dazu etwas was ich mir durchlesen kann wie es in etwa funktioniert?

Ansonsten gibt es keine andere Möglichkeit einen "key press" darzustellen?
Für Windows gibt es Winpy32 mit dem es super einfach funktioniert.
BlackJack

@Sedi.py: Wenn eine Taste erkannt wurde schmeisst Du die Information in geeigneter Form in eine `Queue.Queue` (Python 2) oder `queue.Queue` (Python 3) und im Hauptthread holst Du die dann da der Reihe nach raus.

Was willst Du denn eigentlich machen?
Sedi.py
User
Beiträge: 4
Registriert: Donnerstag 29. Juni 2017, 08:32

Ok, danke! Werde mir das mal genauer angucken.

Ich habe vor eine KI zu Tetris zu programmieren. Und für mein CNN brauche ich Trainingsdaten, dafür brauche ich ein Bild und zu dem aufgenommenem Bild einen Tasten-Input. Den visuellen Part habe ich schon, das Problem ist wie beschrieben, dass ich die gedrückten Tasten mit der Main nicht aufrufen und somit nicht mit abspeichern kann. Ich hoffe ich konnte es einigermaßen verständlich darstellen. :D
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Waere es da nicht viel einfacher ein bestehendes Tetris zu nehmen & einfach eine Tasten-Visualisierung einzubauen?

Zb das hier: http://jordantrudgett.com/stuff/tetris_73.zip
Antworten