Why is `None` returned instead of tkinter.Entry object?

↘锁芯ラ 提交于 2019-11-28 08:21:17

问题


I'm new to python, poking around and I noticed this:

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()

outputs contain:

'txtTest1': None

'txtTest2': <tkinter.Entry object at 0x00EADD70>

Why does test1 have a None instead of <tkinter.Entry object at ...?

I'm using python 3.2 and PyScripter.


回答1:


The place method of Entry doesn't return a value. It acts in-place on an existing Entry variable.




回答2:


because Entry.place() returns None

in a more C-like language you could do:

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

and txtText1 would be the Entry object, but that syntax is illegal in Python.




回答3:


You are creating an object (txtTest1) and then calling a method on that object (place). Because you code that as one expression, the result of the final method is what gets returned. place returns None, so txtTest1 gets set to None

If you want to save a reference to a widget you need to separate the creation from the layout (which is a Good Thing To Do anyway...)

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


来源:https://stackoverflow.com/questions/6933572/why-is-none-returned-instead-of-tkinter-entry-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!