私が取り組んでいる 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() を妨げていた場合)、それは役に立ちませんでした。
何か案は?前もって感謝します!