我想知道Python Tkinter中.xxxxxx
(例如.50109912
)的含义是什么。我试图检查Widget_name(container, **configuration options).pack()
返回的内容
当然它会返回None
但是当我在打包之前检查小部件返回的内容时,它会给出.50109912
这样的内容。这就是我在IDLE Python3.3中得到它的方式。
>>> from tkinter import *
>>> root = Tk()
>>> mybutton = Button(root, text="Click Me", command=root.destroy)
>>> print(mybutton)
.50109912
答案 0 :(得分:7)
数字50109912
是按钮小部件的唯一Python对象ID:
>>> from tkinter import *
>>> root = Tk()
>>> mybutton = Button(root, text="Click Me", command=root.destroy)
>>> print(mybutton)
.38321104
>>> id(mybutton)
38321104
>>>
此外,字符串.50109912
是按钮小部件的窗口路径名。窗口路径名称由TCL解释器在内部使用,以跟踪窗口小部件以及它们的父项。换句话说,它们是解释器遵循的路径,以便达到特定的小部件。
您也会注意到50109912
与winfo_name
方法返回的号码相同:
>>> mybutton.winfo_name()
'38321104'
>>>
但请注意,winfo_name
仅返回窗口小部件窗口路径名称的最后部分(其对象ID)。要获得完整路径,您需要通过执行widget.__str__()
或str(widget)
来致电print(widget)
。
调用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_*
方法的部分)。它包含有关如何获取窗口小部件窗口路径名称的特定部分的信息。
此外,如果您想要对象的Python表示,可以使用repr
:
>>> from tkinter import *
>>> root = Tk()
>>> mybutton = Button(root, text="Click Me", command=root.destroy)
>>> print(repr(mybutton))
<tkinter.Button object at 0x0248BBD0>
>>>
答案 1 :(得分:3)
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号序列显示小部件的谱系。