为什么返回的是 `None` 而不是 tkinter.Entry 对象?
我刚开始学习Python,随便试了试,发现了这个:
from tkinter import *
def test1():
root = Tk()
txtTest1 = Entry(root).place(x=10, y=10)
print(locals())
def test2():
root = Tk()
txtTest2 = Entry(root)
txtTest2.place(x=10, y=10)#difference is this line
print(locals())
test1()
test2()
输出的内容包括:
'txtTest1': None
'txtTest2': <tkinter.Entry object at 0x00EADD70>
为什么test1的结果是None
,而不是<tkinter.Entry object at ...
呢?
我使用的是Python 3.2和PyScripter。
3 个回答
2
你正在创建一个对象(txtTest1
),然后在这个对象上调用一个方法(place
)。因为你把这两个操作写成了一行代码,所以最后这个方法的结果就是返回的内容。place
方法返回的是 None
,所以 txtTest1
最终也被设置成了 None
。
如果你想保存一个控件的引用,最好把创建控件和布局分开写(这样做其实是个好习惯...)
txtTest1 = Entry(root)
txtTest1.place(x=10, y=10)
3
因为 Entry.place() 返回的是 None
在更像 C 语言的编程语言中,你可以这样做:
(txtTest1 = Entry(root)).place(x=10, y=10)
这样 txtText1 就会是 Entry 对象,但这种写法在 Python 中是非法的。
5
Entry
的place
方法不会返回任何值。它直接在已有的Entry
变量上进行操作。