Python 3.x 如何获得焦点中小部件的对象名?

Python 3.x 如何获得焦点中小部件的对象名?,python-3.x,tkinter,Python 3.x,Tkinter,非常类似于 print("focus object class:", window2.focus_get().__class__) 摘自这里: ,但我需要对象的确切名称。 类似于:self.entrywidget_1 或: 如果为真,填写占位符要做什么 print(self.focus_get().__class__) if self.focus_get().__class__ == "placeholder": print("I work") 第一次打印返回您不能。任何给定的对象

非常类似于

print("focus object class:", window2.focus_get().__class__) 
摘自这里: ,但我需要对象的确切名称。 类似于:self.entrywidget_1

或:

如果为真,填写占位符要做什么

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

第一次打印返回

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

self.foo = tk.Button(...)
self.bar = self.foo
您很少需要小部件的名称。您只需要有一个对小部件的引用,就像由
focus\u 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")

小部件如何知道您分配给它的名称?不过,您可以尝试在例如
dir(self)
中查找匹配的对象。这听起来像是个问题。你为什么需要这个名字?好吧,我来给你举个例子,看看我正在开发的应用程序。这是一个相当复杂的计算器。它有一个x根y选项,我正在处理,因为x根y太复杂了,我无法实现主计算过程,我做了一个检查按钮,在主界面下创建一个框架,有2个入口和几个按钮来进行计算。现在,我希望能够在这些条目中使用界面按钮进行键入,如果您可以帮助我解决下面的问题,或者我可以让它工作,通过Oakley先生的方式:打印(“焦点对象类:”,window2.focus\u get()。\uuuuuuuu类\uuuuuuu)是你的评论吗?我不知道我必须设置什么占位符,这样当我按下UI上的按钮而不是写入主界面时,它会写入条目中,因此如果self.focus\u get()。\uuuuu class\uuuu==“占位符”:键入到条目其他:键入到主UI你可能会认为,但我有两个条目。。。不,我不会有两个条目,只有一个。解决办法很有趣。当您完成输入操作的第一个值时,按一个按钮,条目将替换为带有该条目值文本的标签,然后出现另一个条目,u输入bla bla并进行计算我需要它,因为在我的应用程序中,焦点不是我在主UI中键入的条目,因为我的计算器没有使用条目小部件作为条目,而是根据UI或键盘按钮的不同而变化的标签。谢谢你,它的工作除外@JozefMéry:如果是这种情况,只需将聚焦小部件与您的特殊小部件进行比较(例如:
if focused\u widget==self.placeholder
,if
self.placeholder
您正在比较的条目小部件是否被称为genius)?不谢谢你,天才先生:我没有意识到self.focus\u get()和self.widget如果在焦点中,基本上都对应于同一个widget