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

5 投票
3 回答
3475 浏览
提问于 2025-04-16 22:50

我刚开始学习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

Entryplace方法不会返回任何值。它直接在已有的Entry变量上进行操作。

撰写回答