Почему вместо объекта tkinter.Entry возвращается `None`? - PullRequest
4 голосов
/ 04 августа 2011

Я новичок в 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 ]

4 голосов
/ 04 августа 2011

Метод place для Entry не возвращает значение. Он действует на месте существующей переменной Entry.

3 голосов
/ 04 августа 2011

, потому что Entry.place () возвращает None

на более похожем на C языке, который вы могли бы сделать:

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

и txtText1 будет объектом Entry, но этот синтаксис недопустимв Python.

2 голосов
/ 04 августа 2011

Вы создаете объект (txtTest1) и затем вызываете метод для этого объекта (place).Поскольку вы кодируете это как одно выражение, результатом финального метода является то, что возвращается.place возвращает None, поэтому txtTest1 устанавливается на None

Если вы хотите сохранить ссылку на виджет, вам нужно отделить создание от макета (что является хорошим вариантомВ любом случае ...)

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