как привязать кнопку в tkinter

#python #tkinter

Вопрос:

 import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.title("Tic Tac Toe")
root.geometry("505x500")
root.resizable(0,0)

Blank = tk.PhotoImage(file='Blank.png')
X = tk.PhotoImage(file='X.png')
O = tk.PhotoImage(file='O.png')

def configB(event):
    print('hello')

btn1 = tk.Button(root,image=Blank)
btn1.place(x=0,y=0)

btn2 = ttk.Button(image=Blank)
btn2.place(x=165,y=0)
btn3 = ttk.Button(image=Blank)
btn3.place(x=330,y=0)
btn4 = ttk.Button(image=Blank)
btn4.place(x=0,y=165)
btn5 = ttk.Button(image=Blank)
btn5.place(x=165,y=165)
btn6 = ttk.Button(image=Blank)
btn6.place(x=330,y=165)
btn7 = ttk.Button(image=Blank)
btn7.place(x=0,y=330)
btn8 = ttk.Button(image=Blank)
btn8.place(x=165,y=330)
btn9 = ttk.Button(image=Blank)
btn9.place(x=330,y=330)

btn1.bind('<Return>',configB)

root.mainloop()
 

я хочу привязать btn1, и я хочу, чтобы он работал, когда я нажимаю enter, но ничего не происходит, когда я нажимаю enter в соответствии с моим кодом, он должен печатать «привет».
пожалуйста, помогите, заранее спасибо.

Комментарии:

1. Почему ты привязываешься к кнопкам? Почему бы просто не передать command атрибут?

2. Как правило, вы хотели бы, чтобы привязка ключа применялась к самому окну. Примененный к кнопке, он не сработал бы, если бы на этой кнопке уже не был фокус клавиатуры.

3. место() не следует использовать таким образом. У этого есть свои преимущества, но я бы сказал, что для общего размещения виджетов это не лучший выбор. Используйте grid() или pack(). Тем не менее, вы можете просто добавить a command к своей кнопке.

4. command срабатывает только при нажатии кнопки, и нажатие кнопки «Возврат» при выборе кнопки не то же самое, что предоставление опции команды. Но обычно в тех случаях, когда нам это требуется, это формы входа в систему, где пользователь вводит имя пользователя и пароль, нажимает «Ввод» и переходит, затем вам нужно перейти bind к виджетам ввода, а не к кнопкам, так как для того, чтобы сосредоточиться на кнопках, вам придется «закладывать» их.

Ответ №1:

Как сказал @jasonharper, это будет работать только в том случае, если кнопка сфокусирована

 btn1.focus()
btn1.bind('<Return>', configB)
 

и если вы нажмете другую кнопку, то она больше не будет работать

так что лучше привязаться к основному winodw

 root.bind('<Return>', configB)
 

Минимальный рабочий код

 import tkinter as tk

# --- functions ---  # PEP8: lower_case_names

def config_b(event):
    print('hello')

# --- main ---

root = tk.Tk()

btn1 = tk.Button(root, text='1')
btn1.pack()

btn1 = tk.Button(root, text='2')
btn1.pack()

#btn1.focus()
#btn1.bind('<Return>', config_b)

root.bind('<Return>', config_b)

root.mainloop()