Wie kann ich den button mit einem Tastatur auslößen?

Fragen zu Tkinter.
Antworten
Jurin
User
Beiträge: 1
Registriert: Dienstag 20. September 2022, 19:52

Bin neu hier, hoffe das ist hier das richtige.

Meine frage ist wie man den button mit enter auslößen kann?
Würde mich über hilfe freuen.

Code: Alles auswählen

import tkinter  as tk

root = tk.Tk()

canvas1 = tk.Canvas(root, width=500, height=520, bg= 'grey19' ,relief='sunken')
canvas1.pack()

label1 = tk.Label(root, text='VOLUMEN RECHNER')
label1.config(font=('helvetica', 25, 'bold'), bg='grey19', fg='gold4')
canvas1.create_window(250, 30, window=label1)

label2 = tk.Label(root, text='Wie lang ist das Rechteck?:')
label2.config(font=('helvetica', 10, 'bold'),bg='grey19', fg='white')
canvas1.create_window(370, 100, window=label2)

label3 = tk.Label(root, text='Wie hoch ist das Rechteck?:')
label3.config(font=('helvetica', 10, 'bold'),bg='grey19', fg='white')
canvas1.create_window(370, 200, window=label3)

label4 = tk.Label(root, text='Wie breit ist das Rechteck?:')
label4.config(font=('helvetica', 10, 'bold'),bg='grey19', fg='white')
canvas1.create_window(370, 300, window=label4)

label5 = tk.Label(root, text='Hinweiß:\n Gebe die zahlen in meter an!\n Achte drauf das alle \nfelder ausgefühlt \nsind und keine buchstaben \ndrin stehen. ')
label5.config(font=('helvetica', 10, 'bold'),bg='grey19', fg='indian red')
canvas1.create_window(130, 150, window=label5)


label6 = tk.Label(root, text='by Jurin')
label6.config(font=('helvetica', 10, 'bold'),bg='grey19', fg='indian red')
canvas1.create_window(120, 400, window=label6)


entry1 = tk.Entry(root)
canvas1.create_window(370, 140, window=entry1)

entry2 = tk.Entry(root)
canvas1.create_window(370, 240, window=entry2)

entry3 = tk.Entry(root)
canvas1.create_window(370, 340, window=entry3)


def getSquareRoot():

                L = entry1.get()
                H = entry2.get()
                B = entry3.get()

                label7 = tk.Label(root, text='Das volumen ist:',font=('helvetica', 10,),bg='grey19', fg='white')
                canvas1.create_window(370, 470, window=label7)

                label8 = tk.Label(root, text=float(L)*float(H)*float(B),font=('helvetica', 10, 'bold'),bg='grey19', fg='red')
                canvas1.create_window(370, 490, window=label8)

button1 = tk.Button(text='Berechne das Volumen', command=getSquareRoot, bg='Blue', fg='White',
                    font=('helvetica', 9, 'bold'),activebackground='grey19',activeforeground='white')
canvas1.create_window(370, 400, window=button1)

root.mainloop()
Benutzeravatar
__blackjack__
User
Beiträge: 10870
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Jurin: Am einfachsten machst Du das gar nicht und verwendest die Leertaste, denn das funktioniert ohne das man zusätzlich etwas machen muss.

Das mit dem `Canvas` ist äh, kreativ. Absolute Positionsangaben werden durch `Canvas` nicht besser. Lass das weg und bau den Fensterinhalt mit `Frame`\s und `grid()` und `pack()` auf.

Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).

Man nummeriert keine Namen. Dann will man sich entweder bessere Namen überlegen, oder gar keine Einzelnamen/-werte verwenden, sondern eine Datenstruktur. Oft eine Liste. Hier wohl in der Regel bessere Namen.

Ich würde dem Benutzer auch keine eigenen Schriftarten und Grössen aufdrücken. Der hat da im System ja Einstellungen gemacht und sich was dabei gedacht.

Code: Alles auswählen

Sheep := 0;
WHILE NOT Asleep DO Inc(Sheep);
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo Jurin
Willkommen in unserem Forum.

Ergänze dein Codesnippet mit:

Code: Alles auswählen

button1.bind('<Return>', on_keypress)

def on_keypress(event):
    print('You pressed the return key')
Selektiere den gewünschten Button mit der Tab-Taste und drücke Enter.

Gruss wuf
Take it easy Mates!
Sirius3
User
Beiträge: 16373
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum setzt Du manche Parameter der Labels beim Erzeugen des Labels und manche erst später mit config?
Variablennamen nummeriert man nicht durch, weil man sonst immer nachschauen muß, was denn nun entry2 denn konkret heißt. Die vielen Labels müssen erst gar nicht an Namen gebunden werden.
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht 14.
Man erzeugt nicht nachträglich weitere Label-Widgets, denn die Verändern das Layout des Fensters und sammeln sich mit der Zeit an, wenn man öfter den Knopf drückt.

Code: Alles auswählen

from functools import partial
import tkinter  as tk


def calculate_volume(length_entry, height_entry, width_entry, header_label, result_label):
    length = float(length_entry.get())
    height = float(height_entry.get())
    width = float(width_entry.get())
    header_label['text'] = 'Das volumen ist:'
    result_label['text'] = length * height * width


def main():
    root = tk.Tk()
    root['bg'] = 'grey19'
    tk.Label(root, text='VOLUMEN RECHNER',
        font=('helvetica', 25, 'bold'), bg='grey19', fg='gold4'
    ).grid(row=0, column=0, columnspan=2)

    tk.Label(root, text='Hinweiß:\n Gebe die zahlen in meter an!\n Achte drauf das alle \nfelder ausgefühlt \nsind und keine buchstaben \ndrin stehen. ',
        font=('helvetica', 10, 'bold'),bg='grey19', fg='indian red'
    ).grid(row=1, column=0,rowspan=6)
    tk.Label(root, text='by Jurin',
        font=('helvetica', 10, 'bold'),bg='grey19', fg='indian red'
    ).grid(row=7, column=0)

    tk.Label(root, text='Wie lang ist das Rechteck?:',
        font=('helvetica', 10, 'bold'),bg='grey19', fg='white'
    ).grid(row=1, column=1)
    length_entry = tk.Entry(root)
    length_entry.grid(row=2, column=1)

    tk.Label(root, text='Wie hoch ist das Rechteck?:',
        font=('helvetica', 10, 'bold'),bg='grey19', fg='white'
    ).grid(row=3, column=1)
    height_entry = tk.Entry(root)
    height_entry.grid(row=4, column=1)

    tk.Label(root, text='Wie breit ist das Rechteck?:',
        font=('helvetica', 10, 'bold'),bg='grey19', fg='white'
    ).grid(row=5, column=1)
    width_entry = tk.Entry(root)
    width_entry.grid(row=6, column=1)

    header_label = tk.Label(root, font=('helvetica', 10,),bg='grey19', fg='white')
    header_label.grid(row=8, column=1)

    result_label = tk.Label(root, font=('helvetica', 10, 'bold'), bg='grey19', fg='red')
    result_label.grid(row=9, column=1)

    calculate_button = tk.Button(root, text='Berechne das Volumen',
        command=partial(calculate_volume,length_entry, height_entry, width_entry, header_label, result_label),
        bg='Blue', fg='White', font=('helvetica', 9, 'bold'),
        activebackground='grey19',activeforeground='white'
    )
    calculate_button.grid(row=7, column=1)
    
    length_entry.bind('<Return>', lambda _: height_entry.focus())
    height_entry.bind('<Return>', lambda _: width_entry.focus())
    width_entry.bind('<Return>', lambda _: calculate_button.invoke())
    length_entry.focus()

    root.mainloop()


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