问题
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