2013-03-25 35 views
3

我正在使用我正在处理的wxpython应用程序发现一些非常奇怪的行为。当我直接运行应用程序(例如python ./main.py)时,一切正常。但是,当我运行应用程序的打包版本(使用py2app制作)时,出现了一些奇怪的行为。使用py2app打包wxpython应用程序更改GUI行为

具体来说:我有一个复选框,当选中时打开一个wx.Frame。当直接运行应用程序时,它工作正常。当我使用打包版本时,首次单击该复选框时没有任何反应。要显示窗口,我必须取消选中该复选框,然后重新检查它。点击事件确实被关闭,并且frame.show()被调用,但该窗口在第一次点击时从不出现。

这里的py2app配置代码:

from setuptools import setup 

APP = ['MessengerVisualization.py'] 
DATA_FILES = ['UVVSSCIC.FMT', 'data', 'magfield', 'shaders', 'textures', 'features.csv', 'libspice.dylib', 'Na.M2.PSD.fast.stick.density.dat', 'messenger_kernels'] 
OPTIONS = {'argv_emulation': False} 

setup(
    app=APP, 
    data_files=DATA_FILES, 
    options={'py2app': OPTIONS}, 
    setup_requires=['py2app'] 
) 

下面是显示代码的缩写版本()S中的窗口:

def handler(evt): 
    if cb.GetValue(): 
     frame = UVVSFrame(None, -1, 'MASCS UVVS Data: %s (%s)' % (species,typestr), 
        size=(854, 480), controller=self, view=view_b, 
        data_provider=self.uvvs_provider, 
        shader_style=style) 
     frame.identifier = wx.NewId() 
     frame.Bind(wx.EVT_CLOSE, frame_cleanup(frame.identifier)) 
     frame.Show() 

它看起来像其他人曾与argv_emulation问题,但将其设置为False似乎并没有解决我的问题。我也尝试了frame.show(),frame.hide(),frame.show()捕捉事件时(以防某些事情阻止了第一个show()),但没有帮助。

任何想法?提前致谢!

+0

你确定它会被叫吗? – 2013-03-25 23:31:23

+0

我观察到同样的问题,它看起来像在py2app版本的窗户创建,但由于某些原因,他们不可见。对我来说,这个问题只存在于较新版本的wxpython(2.9.2.4)中,而旧版本(2.8.10.1)则没有这个问题。你是否也有旧版本的问题? – christianbrodbeck 2013-04-15 16:14:38

+0

我不确定是什么原因引起的,但它已经存在很长时间了。在由Boa构造函数生成的代码中,他们曾经(并且可能仍然会)为应用程序的主框架生成一行,如“frame.Show(); frame.Hide(); frame.Show()”。 IIRC它与Boa如何执行脚本以及系统设置中的某些内容或快捷方式属性或类似的奇怪事情有关,并且它在Boa之外运行时没有相同的问题。 – RobinDunn 2013-04-24 19:20:00

回答

1

我没有解决方案,但我想添加我的观察(不知道为什么我不能评论这个问题)。

我正在面对与创建wx.Dialog的按钮处理程序相同的问题。该对话框仅在我再次单击窗口后出现。但是,使用ShowModal可以正确显示wx.MessageDialog。任何其他想法?这个问题对于所有应用程序构建者来说都是通用的,还是仅仅是py2app?