如何找到一个小部件的唯一且恒定的 ID?

2023-11-26

请注意,对于小部件,这不包括画布项(不是小部件)。

我的目标是构建两个类:一个类生成画布小部件的项目,另一个类生成小部件本身。这是为了确保我可以在窗口中移动东西并在重新打开时将其保留在那里。我已经为画布项目完成了此操作。您会看到,画布小部件实际上返回一个实际 ID,该 ID 对于相关项目保持不变,因此我可以引用它及其坐标。

然而,对于widget本身来说,似乎没有这样的获取ID的方法。我试过了widget.getint(), widget.getvar()等等我也尝试过repr(widget) and id(widget), but both这些值在重新打开时发生变化,我认为创建了新的小部件,其中变量只是指与刚刚销毁的小部件相比的新创建的小部件,即使它具有相同的属性。

我还尝试将所述小部件放入父窗口中,例如窗口或框架,但这些小部件本身不会为它们各自的子小部件分配任何唯一值。

所以基本上,我可以获得任何给定小部件的唯一值,但没有一个是恒定的。这可以通过any顺便说一句,我只需将其转换为字符串,将其附加到字典中,然后将坐标分配给所述 str 以引用特定的小部件。

预先感谢您的任何指导,非常感谢:)


你不能get一个唯一的、恒定的 ID,但您可以give小部件有一个唯一的、恒定的 ID。

在幕后,tkinter 使用 tk。在 tk 中,每个小部件都有一个名称,并且存在于通过点表示法表示的层次结构中。在 tk 中,创建小部件时必须定义名称;这是 tkinter 为您做的事情。当您看到像“.1234567890.0987654f321”这样的小部件名称时,这意味着父部件的内部名称为“.1234567890”,并且小部件被命名为“0987654321”。

您可以通过在创建小部件时指定名称来覆盖自动生成的名称,使用name范围。然后你可以使用str得到名字。

例如:

>>> import Tkinter as tk
>>> root = tk.Tk()
>>> f = tk.Frame(root, name="foo")
>>> b1 = tk.Button(f, name="b1")
>>> str(b1)
'.foo.b1'
>>> root.nametowidget(".foo.b1")
<Tkinter.Button instance at 0x100795488>
>>> b1
<Tkinter.Button instance at 0x100795488>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何找到一个小部件的唯一且恒定的 ID? 的相关文章

随机推荐