[英]traitsui file dialog changes active window
我有一个带有许多小窗口的大型应用程序。 我想使用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之前选择一些其他选项)。
和往常一样,我发现了一个骇人的解决方法。 但是这种行为仍然是一个错误。
解决方法是先dispose()
旧窗口的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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.