在这个项目中,我想为自己的目的自定义tkcalendar python。
当我逐行跟踪时,我想知道第420行是tkinter中常见的ttk.Frame设置了self.header类属性。 self.header对象现在具有_w键对象,其中包含我什至不知道含义的值。

我想知道我用红色强调的这种值格式的含义。

谢谢您的帮助。

python - 调试python代码时,局部变量在变量部分Visual Studio代码上具有值'。!toplevel。!calendar。!frame'-LMLPHP

最佳答案

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

10-07 19:16
查看更多