2013-06-30 4 views
1

Я пытаюсь создать приложение с основным окном и фоновый поток, который проверяет определенное условие в цикле и когда условие выполняется, приносит главное окно перед. Для вывода окна на передний план я использую метод lift(), но он не работает. Так что я сделал следующий эксперимент из командной строки: питонметод lift() пакета Python Tkinter не работает

from Tkinter import * 
root = Tk() 

появляется окно ок. Минимизировать окно и затем:

root.lift() 

Ничего не происходит. Я также попробовал запустить главное окно окна до подъема:

import thread 
# start mainloop in separate thread so we can continue typing 
thread.start_new_thread(root.mainloop,()) 
root.lift() 

Опять же, ничего не происходит. В моем фактическом коде это еще хуже - однажды я звоню lift(), окно застряло и перестает отвечать.

Что я делаю неправильно?

(я использую Python 2.7.2 на Windows 7.)

ответ

1

Вы не можете запустить MainLoop в потоке, отличном от того, где вы создаете виджеты. Фактически, вы не можете взаимодействовать с виджетами вообще из другого потока.

Чтобы вернуть эффект минимизации окна, вам необходимо использовать метод deiconify.

+0

ОК. В предыдущем эксперименте я попытался сделать вывод, и он работает. Благодарю. Как использовать поток для обновления окна? Есть ли какой-либо механизм обмена сообщениями в Windows? – roel

+1

Вам нужно использовать очередь. В stackoverflow есть несколько примеров. Например, http://stackoverflow.com/a/1198288/7432 –

+0

Спасибо за подсказку. Я использовал метод 'after' из примера в ссылке и решил мою проблему. – roel

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