Python Tkinter中.xxxxxxx的含义是什么

What is the meaning of .xxxxxxx in Python Tkinter

我想知道 .xxxxxx(例如 .50109912)在 Python Tkinter 中的含义是什么。我试图检查 Widget_name(container, **configuration options).pack() 编辑的 return 是什么 当然它会 return None 但是当我在打包之前检查小部件 return 编辑了什么时,它给出了这样的东西 .50109912。这就是我在 IDLE Python3.3.

中得到它的方式
>>> from tkinter import *
>>> root = Tk()
>>> mybutton = Button(root, text="Click Me", command=root.destroy)
>>> print(mybutton)
.50109912

数字50109912是按钮小部件的唯一Python对象ID:

>>> from tkinter import *
>>> root = Tk()
>>> mybutton = Button(root, text="Click Me", command=root.destroy)
>>> print(mybutton)
.38321104
>>> id(mybutton)
38321104
>>>

此外,字符串 .50109912 是按钮小部件的 window 路径名。 Window TCL 解释器在内部使用路径名来跟踪小部件及其父项。换句话说,它们是解释器为了到达特定的小部件而遵循的路径。

您还会注意到 50109912winfo_name 方法返回的数字相同:

>>> mybutton.winfo_name()
'38321104'
>>>

但是请注意,winfo_name 仅 returns 小部件 window 路径名(其对象 ID)的最后部分。要获得完整路径,您需要通过执行 str(widget)print(widget).

来调用 widget.__str__()

调用widget.__str__()的文档可以通过help找到:

>>> import tkinter
>>> help(tkinter.Button.__str__)
Help on function __str__ in module tkinter:

__str__(self)
    Return the window path name of this widget.

>>>

此外,您可能对 Effbot 上的 Basic Widget Methods 页面感兴趣(特别是讨论 .winfo_* 方法的部分)。它包含有关如何获取小部件 window 路径名的特定部分的信息。


另外,如果你想要对象的Python表示,你可以使用repr:

>>> from tkinter import *
>>> root = Tk()
>>> mybutton = Button(root, text="Click Me", command=root.destroy)
>>> print(repr(mybutton))
<tkinter.Button object at 0x0248BBD0>
>>>
import tkinter as tk
root = tk.Tk()
button = tk.Button(root)
frame = tk.Frame(root)
subframe = tk.Frame(frame)
label = tk.Label(subframe)

for widget in (root, button, frame, subframe, label):
    print('{:<8} id {:<20} str {!s:30} '.format(type(widget).__name__, id(widget), widget))

产量

Tk       id 140490446651632      str .                              
Button   id 140490446651744      str .140490446651744               
Frame    id 140490446651688      str .140490446651688               
Frame    id 140490417530808      str .140490446651688.140490417530808 
Label    id 140490417531368      str .140490446651688.140490417530808.140490417531368 

如您所见,小部件的 str 是根小部件的 .,是子小部件的点分隔的 id 数字序列。 ID 编号的顺序显示了小部件的沿袭。