为什么返回`None`而不是tkinter.Entry对象?

时间:2011-08-03 21:32:10

标签: python tkinter python-3.2

我是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 个答案:

答案 0 :(得分:4)

place的{​​{1}}方法未返回值。它就地对现有的Entry变量起作用。

答案 1 :(得分:3)

因为Entry.place()返回None

你可以用更像C语言的语言:

(txtTest1 = Entry(root)).place(x=10, y=10)

和txtText1将是Entry对象,但该语法在Python中是非法的。

答案 2 :(得分:2)

您正在创建一个对象(txtTest1),然后在该对象上调用方法(place)。因为您将其编码为一个表达式,所以最终方法的结果是返回的结果。 place返回None,因此txtTest1设置为None

如果你想保存对小部件的引用,你需要将创建与布局分开(无论如何都要做好事......)

txtTest1 = Entry(root)
txtTest1.place(x=10, y=10)