2013-03-28 2 views
0

У меня есть большое приложение, которое имеет много маленьких окон. Я хотел использовать диалог файла traitsui для открытия некоторых файлов из этих окон. Однако, когда я это делаю, диалог файла правильно порождает и выбирает файл, но он также последовательно переключает активное окно в нежелательное окно после его завершения. Я действительно смущен почему.Диалог файла traitsui изменяет активное окно

Вот упрощенный тест, который показывает ту же проблему:

from traitsui.api import * 
from traits.api import * 
from traitsui.file_dialog import * 

class BigApplication(HasTraits): 
    subwindow=Instance(HasTraits) 
    open_subwindow=Button('clickme') 

    traits_view=View(Item(name='open_subwindow'),height=500,width=500) 

    def _subwindow_default(self): 
    return Subwindow() 

    def _open_subwindow_fired(self): 
    self.subwindow.edit_traits() 

class Subwindow(HasTraits): 
    f=File 
    some_option = Bool 
    openf=Button('Browse for file') 

    traits_view=View(Item(name='f',style='text'), 
       Item(name='some_option'), 
       Item(name='openf'),buttons=OKCancelButtons) 

    def _openf_fired(self): 
    self.f=open_file() 

BigApplication().configure_traits() 

Когда open_file возвращается и выбирает нужный файл, активное окно переключается в окно BigApplication, а не к окну подокна (так что пользователь может выбрать некоторые дополнительные параметры, прежде чем нажать OK).

+0

Какая ОС это под? –

+0

CentOS 6 x64, epd 7.3-1 – aestrivex

ответ

0

Я нашел хакерское обходное решение, как обычно. Но это поведение по-прежнему является ошибкой.

Обходное решение - dispose() старого окна, а затем для вызова edit_traits(). Это изменяет свойство File, а также делает его активным. Утилизация окна вручную должна выполняться внутри обработчика и немного сложнее, чем можно было бы ожидать.

from traits.api import * 
from traitsui.api import * 
from traitsui.file_dialog import * 

class BigApplication(Handler): 
    subwindow=Instance(Handler) 
    open_subwindow=Button('clickme') 

    traits_view=View(Item(name='open_subwindow'),height=200,width=200) 

    def _subwindow_default(self): 
    return Subwindow() 

    def _open_subwindow_fired(self): 
    self.subwindow.edit_traits() 

class Subwindow(Handler): 
    f=File 
    some_additional_option=Bool 
    openf=Button('Browse') 

    traits_view=View(Item(name='f',style='text'), 
    Item(name='some_additional_option'), 
    Item(name='openf'), 
    buttons=OKCancelButtons) 

    def _openf_fired(self): 
    self.f=open_file() 
    self.do_dispose(self.info) 
    self.edit_traits() 

    #handler methods 
    def init_info(self,info): 
    self.info=info 
    def do_dispose(self,info): 
    info.ui.dispose() 

BigApplication().configure_traits() 
Смежные вопросы