在这个项目中,我想为自己的目的自定义tkcalendar python。
当我逐行跟踪时,我想知道第420行是tkinter中常见的ttk.Frame
设置了self.header
类属性。 self.header
对象现在具有_w
键对象,其中包含我什至不知道含义的值。
我想知道我用红色强调的这种值格式的含义。
谢谢您的帮助。
最佳答案
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