2012-06-19 4 views
3

Я хочу нарисовать виджет (в этом примере, холст), а затем удалить его через некоторое время. Как сообщение, которое появляется, а затем удаляется, просто чтобы пользователь мог его прочитать, но нет необходимости нажимать «ok» или что-то подобное, чтобы удалить сообщение.Python Tkinter - скрыть виджет через некоторое время

Вот пример кода.

from tkinter import* 

root = Tk() 

canvas_1 = Canvas(root, width = 300, height = 300, bg = 'white') 
canvas_1.grid(column = 0, row = 0) 

canvas_2 = Canvas(canvas_1, width = 200, height = 200, bg = 'blue') 
canvas_2.place(x = 50, y = 50) 

canvas_1.after(1000, canvas_2.place_forget()) 

root.mainloop() 

Проблема заключается в том, что кажется Tkinter бежит метод after() прежде, чем все остальное, независимо от того, когда она вызывается в коде. В результате canvas_2 никогда не появляется.

Я пробовал time.sleep(), но в этом случае он работает так же.

Заранее спасибо.

ответ

4

Вопрос заключается в том, что ваш after заявление фактически вызывает canvas_2, который необходимо незамедлительно забыть . Это потому, что() передают Python запустите функцию place_forget (а не запустите ее в 1000 мс). Удалите(), и вам будет хорошо идти. Удачи.

Заменить это:

canvas_1.after(1000, canvas_2.place_forget()) 

с этим:

canvas_1.after(1000, canvas_2.place_forget) 
+0

Так просто, благодаря человеку. –

+0

Добро пожаловать. Это то, что легко запомнить после того, как вы его сожгли один или два раза. – gary

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