Tastatureingaben anfragen

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
markjohannes
User
Beiträge: 29
Registriert: Dienstag 24. April 2018, 22:04

Liebe Community
Meine Frage ist, wie ich in Python generell die Tastatureingaben abfragen kann. Es sollte ohne gui und mit gui wie z.b. pygame oder tkinter funktionieren. Wenn es dafür keine Möglichkeit gibt, wüsste ich gern weine Möglichkeit für tkinter.

Mit gespannten Grüßen
Johannes Schaffer
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Kannst du mal etwas weiter ausholen was du eigentlich erreichen willst, und unter welchem OS. Dann kann man dazu auch was aussagekräftiges sagen.
markjohannes
User
Beiträge: 29
Registriert: Dienstag 24. April 2018, 22:04

Das os soll Linux sein.
Ich möchte vorrangig in guis wie tkinter und pygame die Tastatur abfragen und so bestimmte Buttons und Befehle bestimmten Tasten zuweisen.

Viele Grüße
Johannes Schaffer
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@markjohannes: dann nimm doch die Möglichkeiten, die tkinter, bzw. pygame Dir dafür bereitstellen. Generell gibt's da nichts, nur individuell für jedes Rahmenwerk.
markjohannes
User
Beiträge: 29
Registriert: Dienstag 24. April 2018, 22:04

Okay und wie heißt die Funktion für tkinter.
markjohannes
User
Beiträge: 29
Registriert: Dienstag 24. April 2018, 22:04

Und wie kann ich den Titel nachträglich ändern?
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hast du mal geschaut? Was in der tkinter Dokumentation ist dir unklar?
markjohannes
User
Beiträge: 29
Registriert: Dienstag 24. April 2018, 22:04

Ich bin erst 15 und kann noch nicht so gut Englisch.
Wenn du mir einfach die Funktion nennen könntest wäre das nett:)
LG Johannes
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist nicht nur einfach eine Funktion. Und um das Englisch kommst du nicht herum. Das ist im programmieren überall. Mit Google translate wird das schon gehen.

http://effbot.org/tkinterbook/tkinter-e ... ndings.htm
markjohannes
User
Beiträge: 29
Registriert: Dienstag 24. April 2018, 22:04

Danke wo kann ich denn die offizielle Dokumentation von tkinter finden? Oder was meinst du mit tkinter Dokumentation?
LG Johannes
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das was ich dir geschickt habe ist vom Autor von tkinter. Ansonsten natürlich auf Python.org.
markjohannes
User
Beiträge: 29
Registriert: Dienstag 24. April 2018, 22:04

Und ich habe mir deinen Link jetzt durchgelesen und Frage mich, ob ich auch tkinter sagen, dass er nur auf eine bestimmte taste hört, so wie in pygame mit z.b. K_ a .
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja. Steht da drin.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du bekommst genauso wie bei pygame ein Event und musst das abfragen. Das kannst aber auch einen konkreten Buchstaben angeben. Ist alles in dem Dokument erklärt.
markjohannes
User
Beiträge: 29
Registriert: Dienstag 24. April 2018, 22:04

Okay. Vielen Dank
Und einen Schönen Tag noch.
Kann man die treads hier irgendwie auf gelöst setzen?
LG Johannes
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi markjohannes

Ich nehme an die vergangenen Antworten haben noch nicht ganz zum Ziel geführt? Hier etwas für Tkinter:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

try:
    #~~ For Python 2.x
    import Tkinter as tk
except ImportError:
    #~~ For Python 3.x
    import tkinter as tk

def taste_gedrueckt(event):
    taste_char = event.char
    taste_code = event.keycode
    taste_symbol = event.keysym
    taste_num = event.keysym_num
    print("\nFolgende Taste wurde gedrückt:"\
        + "\nChar:{}\nCode:{}\nSymbol:{}\nNummer:{}".format(
        taste_char, taste_code, taste_symbol, taste_num))
    
    app_win.title("Tasten Symbol: {}".format(taste_symbol))
    
app_win = tk.Tk()
app_win.title("Bitte Taste drücken")
app_win.geometry("300x100")
app_win.bind('<KeyPress>', taste_gedrueckt)
app_win.mainloop()
Gruss wuf :wink:
Take it easy Mates!
markjohannes
User
Beiträge: 29
Registriert: Dienstag 24. April 2018, 22:04

Wow!
Das hat perfekt funktioniert. Genau so etwas habe ich gesucht, auch wenn ich mich durch die Dokumentation gearbeitet habe; aber diese habe ich nicht so gut verstanden:(
PS: Kennst du eine Funktion mit der man einen Button klicken kann? Ich kenne invoke() aber die ist nach meiner subjektiven Meinung ziemlich langsam.

Mit freundlichen Grüßen
Johannes Schaffer
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi markjohannes

Hier noch eine Erweiterung des obigen Skript mit einem Button und dessen Funktion .invoke():

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

try:
    #~~ For Python 2.x
    import Tkinter as tk
except ImportError:
    #~~ For Python 3.x
    import tkinter as tk

def button_gedrueckt():
    # Diese Funktion wird durch einen Mausklick auf den 'Button-A', aber auch
    # durch drücken der Tastaturtaste 'A' aufgerufen.
    # Die Buttonfunktion .invoke() wird benützt um die 'command-Funktion des
    # Buttons aufzurufen bewirkt aber keine animierte Bewegung des Buttons!
    print("Button-A wurde gedruekt")
    
def tastatur_taste_gedrueckt(event):
    taste_char = event.char
    taste_code = event.keycode
    taste_symbol = event.keysym
    taste_num = event.keysym_num
    print("\nFolgende Taste wurde gedrückt:"\
        + "\nChar:{}\nCode:{}\nSymbol:{}\nNummer:{}".format(
        taste_char, taste_code, taste_symbol, taste_num))
    
    app_win.title("Tasten Symbol: {}".format(taste_symbol))
    
    if taste_char == "A":
        print('Hi')
        app_win.button_a.invoke()
        
app_win = tk.Tk()
app_win.title("Bitte Taste drücken")
app_win.geometry("300x100")
app_win.bind('<KeyPress>', tastatur_taste_gedrueckt)
app_win.button_a = tk.Button(app_win, text='Button-A', command=button_gedrueckt)
app_win.button_a.pack(expand=True)

app_win.mainloop()
Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

__deets__ hat geschrieben:um das Englisch kommst du nicht herum. Das ist im programmieren überall. Mit Google translate wird das schon gehen.
Mit DeepL geht es besser :mrgreen: viewtopic.php?t=41258
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Antworten