3

私が取り組んでいる wxpython アプリで、本当に奇妙な動作が発生しています。アプリケーションを直接実行すると (例: python ./main.py)、すべて正常に動作します。ただし、パッケージ化されたバージョンのアプリ (py2app で作成) を実行すると、奇妙な動作が発生します。

具体的には、チェックすると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']
)

ウィンドウを show() するコードの短縮バージョンを次に示します。

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() を妨げていた場合)、それは役に立ちませんでした。

何か案は?前もって感謝します!

4

1 に答える 1

1

解決策はありませんが、観察結果を追加したいと思います (質問にコメントできない理由がわかりません)。

wx.Dialog を作成するボタン ハンドラーで同じ問題に直面しています。ダイアログは、ウィンドウをもう一度クリックした後にのみ表示されます。ただし、wx.MessageDialog は ShowModal を使用すると正しく表示されます。他のアイデアはありますか?この問題はすべてのアプリ ビルダーに共通するものですか、それとも py2app だけですか?

于 2013-05-06T20:11:53.380 に答える