Как привязать функции к клавишам на клавиатуре с помощью tkinter - PullRequest
0 голосов
/ 18 января 2019

Я хочу создать функцию, которая запускается нажатием кнопки с командой (b = Button(command = a)), которая также сможет принимать вызовы от команды bind.Проблема в том, что команда bind отправляет переменную (событие), а команда - нет.Другая проблема, с которой я сталкиваюсь, заключается в том, что я не могу понять, как связать функции с нажатием физической клавиши на компьютере

Я попытался b.bind('a',func) связать физические клавиши и проверил привязку с помощью клавиши ввода

from tkinter import *
def func():
    print("meow")

main = Tk()
bRoll = Button(text = "Hello", command = func)
bRoll.bind('r',func)
bRoll.bind('<Enter>',func)
bRoll.pack()
main.mainloop()

Это, похоже, не сработало, так как ничего не дало, и я попытался привязаться к клавише Ввод (<Enter>), чтобы увидеть, что происходит, и он напечатал ошибку, потому что хотелотправить событие на func и оно не может его принять.

1 Ответ

0 голосов
/ 18 января 2019
  1. Нет смысла привязывать кнопку к событию.По сути, вы хотите, чтобы при нажатии клавиши вызывался func().Для этого в этом примере вам нужно привязать событие к главному окну, как в main.bind('r' ,func).
  2. Чтобы использовать event, вы можете добавить его в качестве параметра и инициализировать какNone.Также обратите внимание, что <Enter> означает, что когда указатель мыши вводит виджет кнопки, а не клавишу Enter .Чтобы связать клавишу Enter, вам нужно использовать <Return>.

    import tkinter as tk
    
    def func(event=None):
        tk.Label(main, text="Meow").pack()
    
    main = tk.Tk()
    bRoll = tk.Button(text = "Hello", command = func)
    main.bind('r',func)
    bRoll.bind('<Enter>',func)
    bRoll.pack()
    
    main.mainloop()
    

Demo

Обратите внимание, что в приведенной выше демонстрации сначала я нажал клавишу R .

...