Tkinter 是嵌入式 tcl/tk 解释器的包装器。每个 tkinter 小部件都与较低级别的 tcl/tk 小部件相关联。 _w 属性是这个低级 tcl/tk 小部件的名称。
tcl/tk 小部件的命名约定类似于文件系统路径,不同之处在于它使用. 而不是/。因此,根窗口是前导.,后续子窗口由. 分隔。 Tcl 允许您使用您想要的任何字符作为名称,. 除外。
在最新版本的 tkinter 中,tkinter 通过将小部件类转换为小写字母并在其前面加上 ! 来选择名称。如果已经有一个同名的小部件,它会附加一个数字(例如:.!frame、.!frame2 等)
您的具体示例如下所示:
.!toplevel.!calendar.!frame
^^ ^ ^
|| | +- Frame widget, child of the Calendar
|| +-Calendar widget, child of the Toplevel
|+-Toplevel widget, child of the root window
+-root window
虽然很少这样做,但您可以提供自己的小部件名称,以使这个内部名称更有意义。考虑这个例子:
root = tk.Tk()
dialog = tk.Toplevel(root, name="custom-dialog")
buttons = tk.Frame(dialog, name="button-frame")
ok = tk.Button(buttons, name="ok-button")
使用上面的代码,“确定”按钮将具有以下内部名称:
.custom-dialog.button-frame.ok-button