如何获取焦点对象的对象名称?

时间:2015-07-30 14:51:07

标签: python-3.x tkinter

非常相似
print("focus object class:", window2.focus_get().__class__) 

取自这里: Python get focused entry name ,但我需要对象的确切名称。 类似的东西:self.entrywidget_1

OR:

如果是真的话,该如何填补占位符?

print(self.focus_get().__class__)
if self.focus_get().__class__ == "placeholder":
    print("I work")

第一次打印返回< class' tkinter.Entry' >

1 个答案:

答案 0 :(得分:2)

你做不到。任何给定的对象都可以有许多名称。例如,给定以下代码,您希望获得哪个名称?

self.foo = tk.Button(...)
self.bar = self.foo

您很少(如果有的话)需要窗口小部件的名称。有了对小部件的引用 - 就像focus_get()返回的那样 - 就是你所需要的。有了这个,你可以插入数据,删除数据,销毁小部件,获取小部件内容等等。

如果在相同的函数必须适用于多个小部件的情况下确实需要一些可预测的唯一标识符,则可以为每个小部件提供一个符号名称的自定义属性。然后,您可以在运行时获取该名称。例如:

e = tk.Entry(...)
e.name = "placeholder"
...
focused_widget = root.focus_get()
print (the name of the focused widget is %s" % focused_widget.name)

同样,您可能不会需要它。例如,如果要删除焦点窗口小部件中的文本,只需使用对窗口小部件的引用:

focused_widget.delete(0, "end")

如果您真正需要的是检查焦点小部件是否是特定小部件,只需进行直接比较:

...
self.placeholder = tk.Entry(...)
...
def whatever(self):
    focused_widget = root.focus_get()
    if focused_widget == self.placeholder:
        print("I work")
相关问题