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