2013-03-25 36 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?