2014-09-30 2 views
-2
#here is the example code: 
label1 = Label(app, text="This is a Label!") 
label1.pack() 
#But when i do: 
label1.pack_forget() 
#I get this error: 
#AttributeError: 'NoneType' object has no attribute 'pack_forget' 
#I also try: 
label1.destroy() 

У меня такая же ошибка. Я хочу, чтобы убрать ярлык на экране, чтобы я мог поставить обновленную метку на экране.Как удалить ярлык на экране в python Tk GUI

+0

Код в вашем вопросе не даст ошибку, о которой вы говорите. Создает ли ваш фактический код такой ярлык: 'label1 = Label (...). Pack (...)'? –

+0

Да, фактический код делает этот ярлык таким. это пример моей проблемы. Кстати, я запускаю python 2.7.5, если эта информация помогает, спасибо. – WaydeHall

+0

Итак, вы просите нас отладить ваш код, показывая нам код, который не является вашим кодом. В будущем, если вы хотите получить помощь, покажите нам фактический код, который демонстрирует проблему, пожалуйста. –

ответ

1

Проблема, как поясняется в разделе комментариев, заключается в том, что вы делаете это:

label1=Label(...).pack(...) 

В результате label1 будет None. Когда бы вы делали x=foo().bar(), x всегда будет установлен на результат bar(). В этом случае результат pack(...) всегда будет None, поэтому label1 всегда будет None. И, очевидно, None не имеет метода с именем pack_forget.

Решение отделить виджет создание от макета виджета:

label1 = Label(...) 
label1.pack(...) 

Для решения вопроса в названии: чтобы удалить виджет с экрана, вы можете использовать pack_forget() или grid_forget(), в зависимости от того, используется ли вы pack или grid на этом виджете. Помните, что это не уничтожить виджет, он удаляет его только из вида.

Чтобы полностью удалить виджет, вызовите метод destroy(), который удалит виджет и удалит его из виду.

0

во-первых, вы назвали свою метку label1, но тогда вы делаете label.pack_forget(). он должен быть label1.pack_forget().

вторых убедитесь, что вы делаете label1.pack_forget() и/или label1.destroy() перед (то, что я предполагаю, что есть) app.mainloop()

, если вы хотите обновить метку, которую следует использовать label.config(attributes to update)

пример:

import tkinter 

window=tkinter.Tk() 

label1=tkinter.Label(window,text='this is a label!') 

label1.pack() 

label1.config(text='this label has been changed') 

window.mainloop() 
+0

Я исправил опечатку «label1», а затем попытался использовать label1.config(), но у меня появилась ошибка, говорящая, что атрибута «config» нет. Я убедился, что сделал это до app.mainloop() – WaydeHall

+0

, какие атрибуты вы положили в скобки и где именно вы положили label1.config()? – Thedudxo

+0

Я использовал label1.config (текст = 'отредактированный текст'), и я убедился, что это было после «label1.pack()» и до app.mainloop(). Спасибо за вашу помощь и терпение. – WaydeHall

Смежные вопросы