Python 获取焦点条目名称
Python get focused entry name
我试图在按下向上或向下箭头键时增加或减少输入值。为此,我需要首先找到焦点所在的条目,我正在尝试这样做“.focus_get()”。问题是我无法弄清楚它是如何工作的或者它返回了什么。它为每个条目返回 1 个唯一编号,例如:“.45191744”,但每次 运行 程序时此编号都会更改。
以下数字是最后 5 次尝试的结果,当时 运行 正在输入代码。
“.50518728”
“.53009096”
“.55889592”
“.51891896”
如何获取焦点条目的变量名?
这是我的代码:
def get_focus1(event):
print("return: event.widget is", event.widget)
print("focus is:", window2.focus_get())
print(window2.focus_get())
print(help(window2.Entry))
window2 = Tk()
eyear1 = Entry(window2, width=4, font=("Helvetica", 16)) # Entry for year
eyear1.insert(10, defaultYear)
eyear1.grid(row=1, column=1)
emonth1 = Entry(window2, width=4, font=("Helvetica", 16)) # Entry for Month
emonth1.insert(10, defaultMonth)
emonth1.grid(row=1, column=2)
eday1 = Entry(window2, width=4, font=("Helvetica", 16)) # Entry for day
eday1.insert(10, defaultDay)
eday1.grid(row=1, column=3)
window2.bind('<Left>', get_focus1)
mainloop()
请记住,当您调用 print 时,您得到的是对象的表示,不一定是对象本身。为了向您展示发生了什么,请将其添加到您的 get_focus1
函数中:
print("focus object class:", window2.focus_get().__class__)
您应该看到它确实返回了对 Entry
小部件的引用,这意味着您可以调用该对象的所有常规方法。
focus_get
returns 实际对象。你想做什么,假设你没有使用 textvariable
有充分的理由(见布莱恩的评论),是清除文本并重新写入新值(做一些验证显然)。你最终得到的是这样的:
from tkinter import *
def up(event):
# warning, exceptions can happen
old = int(event.widget.get()) # this gives back the actual object!
event.widget.delete(0, END) # delete existing text
event.widget.insert(10, old + 1) # put new text in
def down(event):
# warning, exceptions can happen
old = int(event.widget.get()) # this gives back the actual object!
event.widget.delete(0, END) # delete existing text
event.widget.insert(10, old - 1) # put new text in
window2 = Tk()
eyear1 = Entry(window2, width=4, font=("Helvetica", 16)) # Entry for year
eyear1.insert(10, 2015)
eyear1.grid(row=1, column=1)
emonth1 = Entry(window2, width=4, font=("Helvetica", 16)) # Entry for Month
emonth1.insert(10, 1)
emonth1.grid(row=1, column=2)
eday1 = Entry(window2, width=4, font=("Helvetica", 16)) # Entry for day
eday1.insert(10, 10)
eday1.grid(row=1, column=3)
# bind both keys to corresponding event handlers
window2.bind('<Up>', up)
window2.bind('<Down>', down)
mainloop()
我试图在按下向上或向下箭头键时增加或减少输入值。为此,我需要首先找到焦点所在的条目,我正在尝试这样做“.focus_get()”。问题是我无法弄清楚它是如何工作的或者它返回了什么。它为每个条目返回 1 个唯一编号,例如:“.45191744”,但每次 运行 程序时此编号都会更改。 以下数字是最后 5 次尝试的结果,当时 运行 正在输入代码。 “.50518728” “.53009096” “.55889592” “.51891896”
如何获取焦点条目的变量名?
这是我的代码:
def get_focus1(event):
print("return: event.widget is", event.widget)
print("focus is:", window2.focus_get())
print(window2.focus_get())
print(help(window2.Entry))
window2 = Tk()
eyear1 = Entry(window2, width=4, font=("Helvetica", 16)) # Entry for year
eyear1.insert(10, defaultYear)
eyear1.grid(row=1, column=1)
emonth1 = Entry(window2, width=4, font=("Helvetica", 16)) # Entry for Month
emonth1.insert(10, defaultMonth)
emonth1.grid(row=1, column=2)
eday1 = Entry(window2, width=4, font=("Helvetica", 16)) # Entry for day
eday1.insert(10, defaultDay)
eday1.grid(row=1, column=3)
window2.bind('<Left>', get_focus1)
mainloop()
请记住,当您调用 print 时,您得到的是对象的表示,不一定是对象本身。为了向您展示发生了什么,请将其添加到您的 get_focus1
函数中:
print("focus object class:", window2.focus_get().__class__)
您应该看到它确实返回了对 Entry
小部件的引用,这意味着您可以调用该对象的所有常规方法。
focus_get
returns 实际对象。你想做什么,假设你没有使用 (见布莱恩的评论),是清除文本并重新写入新值(做一些验证显然)。你最终得到的是这样的:textvariable
有充分的理由
from tkinter import *
def up(event):
# warning, exceptions can happen
old = int(event.widget.get()) # this gives back the actual object!
event.widget.delete(0, END) # delete existing text
event.widget.insert(10, old + 1) # put new text in
def down(event):
# warning, exceptions can happen
old = int(event.widget.get()) # this gives back the actual object!
event.widget.delete(0, END) # delete existing text
event.widget.insert(10, old - 1) # put new text in
window2 = Tk()
eyear1 = Entry(window2, width=4, font=("Helvetica", 16)) # Entry for year
eyear1.insert(10, 2015)
eyear1.grid(row=1, column=1)
emonth1 = Entry(window2, width=4, font=("Helvetica", 16)) # Entry for Month
emonth1.insert(10, 1)
emonth1.grid(row=1, column=2)
eday1 = Entry(window2, width=4, font=("Helvetica", 16)) # Entry for day
eday1.insert(10, 10)
eday1.grid(row=1, column=3)
# bind both keys to corresponding event handlers
window2.bind('<Up>', up)
window2.bind('<Down>', down)
mainloop()