Как определить, какая запись имеет фокус (Tkinter)

#tkinter #focus

#tkinter #фокус

Вопрос:

Я работаю над проектом, в котором есть клавиатура с номером «0 — 9» «.». Я хочу обновлять несколько полей ввода по одному с любой комбинацией чисел, которые генерируются с помощью кнопок. Проблема, с которой я сталкиваюсь, заключается в попытке выяснить, как определить, какое поле ввода имеет фокус в данный момент. Я немного погуглил и смог распечатать разные номера для поля ввода, выбранного с помощью focus_get(), но это число изменилось. В конце концов, я хочу иметь возможность щелкнуть в поле ввода с именем, похожим на entry_0, и иметь возможность нажать на кнопку, которая передаст целое число в это выбранное поле, а затем сможет щелкнуть в другом поле и передать другое целое число.

Ниже приведен некоторый код, который я нашел с помощью поиска в Google, и он наиболее близок к тому, чтобы я мог делать то, что я хочу, но цифры, которые он печатает, отличаются при каждом запуске кода.

 from Tkinter import *
root=Tk()
e1=Entry(root)
e1.pack()
e2=Entry(root)
e2.pack()
def handleReturn(event):
    print "return: event.widget is",event.widget
    print "focus is:",root.focus_get()

root.bind("<Return>",handleReturn)

root.mainloop()
  

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

1. Имена внутренних виджетов являются случайными. Ваш код работает нормально.

2. Числа для вас не имеют значения, потому root.focus_get() что и event.widget дают вам объект ввода, и вы можете присвоить его переменной (т.е. selected = event.focus_get() ) и позже использовать его для изменения текста selected.insert(END, "Hello World!") . Если вам действительно нужны имена, тогда используйте e1.name = 'entry_1' , а затем вы можете использовать selected.name

Ответ №1:

Спасибо. С некоторыми незначительными изменениями я смог заставить ее работать так, как я хочу.

 from Tkinter import *

root=Tk()
e1=Entry(root)
e1.pack()
e2=Entry(root)
e2.pack()
def handleReturn(event):
    test = root.focus_get()
    print test.get()

root.bind("<Return>",handleReturn)

root.mainloop()