Why is `None` returned instead of tkinter.Entry object? [duplicate]
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.
The place
method of Entry
doesn't return a value. It acts in-place on an existing Entry variable.
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.
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)
精彩评论