2013-02-13 4 views
0

В моей игре, у меня есть __init__ функцию, которая создает набор из семи полей ввода, например, так:Tkinter Ошибка при использовании входа Удалить метод

self.string1 = StringVal() 
self.entry1 = Entry(frame, textvariable = self.string1).grid(row = 4, column = 1, sticky = W) 

Это скопированный еще шесть раз. Это работает. В конце игры, хотя, я хочу, чтобы удалить текст в поле ввода, используя этот код я нашел несколько мест онлайн:

self.entry1.delete(0, END) 

Я также пытался использовать что-то еще, что я нашел:

if self.entry1.get(): 
    self.entry1.delete(0, END) 

Оба говорят, что self.entry1 является объектом NoneType и не имеет способа .get() или .delete(). Просто, чтобы попробовать, я заменил self.entry1.get() и self.entry1.delete(0,END) на self.string1.get() и т. Д. Я также попытался заменить .delete(0, END) на .delete(0.0, END). Ни один из них не работал. Я не понимаю, что я делаю неправильно. Спасибо за помощь!

+0

Прочтите первый раздел [этого ответа] (http://stackoverflow.com/a/12024089/1217270). –

ответ

2

Когда вы делаете что-то вроде этого:

self.foo = Button(...).grid(...) 

... Тогда, что сохраняется в self.foo является результатом вызова grid(). Это всегда будет None. Чтобы сохранить ссылку на созданные виджеты, вам нужно отделить создание виджета от Loyout.

+0

СПАСИБО. Это сработало. Я проголосую, но у меня недостаточно представителей. Это полностью решило проблему. Можете ли вы объяснить, почему это происходит? Я не понимаю, почему это работает – erdekhayser