#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()