Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Передать управление системе (Tkinter) [RSS Feed]

#1 Янв. 17, 2010 00:28:36

Didis
От:
Зарегистрирован: 2010-01-17
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Передать управление системе (Tkinter)

Запустил скрипт с окном из другого приложения (на Tkinter), окно блокирует перерисовку окна базового приложения. Как передавать управление системе (windows) для обработки событий на некоторое время ?



Офлайн

#2 Янв. 17, 2010 11:18:21

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Передать управление системе (Tkinter)

Каким образом ты запускаешь внешнюю программу?
Попробуй через subprocess.
Скорее всего, твоя программа (tkinter) ждет завершения внешнего процесса, и не идет цикл mainloop, в котором то как раз происходит отрисовка и реакция на события.



Отредактировано (Янв. 17, 2010 11:20:14)

Офлайн

#3 Янв. 18, 2010 22:47:38

Didis
От:
Зарегистрирован: 2010-01-17
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Передать управление системе (Tkinter)

Питон - скриптовый язык приложения (Blender). Окно созданное независимо отрисовывается нормуль, а при запуске из-под приложения - косяк, при перетаскивании не перерисовывается освобожденная область. Реакцию на события (eventы) не писал (еще не знаком), т.е. цикл mainloop гоняется пустым. Subprocess для меня крутовато звучит, может в tkinter можно организовать, что-то по смыслу ON_TKINTER_UPDATE { … ; MAIN_APLICATION_UPDATE()}- принудительно обновлять базовое приложение при обновлении окна tkinter.



Офлайн

#4 Янв. 19, 2010 11:20:14

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Передать управление системе (Tkinter)

Посмотри метод update…
Когда запускается gui приложение, то оно mainloop вызывает бесконечный цикл, в котором отрисовываются виджеты, происходит реакция на какие либо события (например на нажатия кнопок)
пример:

import time
from Tkinter import *
root=Tk()

def do():time.sleep(20)

b=Button(root,text='do',command=do)
b.pack()
root.mainloop()
при нажатии на кнопку, происходит замораживание цикла mainloop, и 20 секунд окно не будет ни на что реагировать.
В твоем случае, насколько я понял, приложение так же ждет завершения работы команды, заданной в popen.
Вместо os.popen(COMMAND), попробуй сделать subprocess.popen



Офлайн

  • Начало
  • » GUI
  • » Передать управление системе (Tkinter)[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version