【发布时间】:2013-03-15 14:37:53
【问题描述】:
我正在使用的 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']
)
这是显示()窗口的代码的缩写版本:
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()),但这并没有帮助。
有什么想法吗?提前致谢!
【问题讨论】:
-
你确定它被调用了吗?
-
我观察到了同样的问题,似乎在 py2app 版本中确实创建了窗口,但由于某种原因它们不可见。对我来说,这个问题只存在于较新的 wxpython 版本(2.9.2.4),而旧版本(2.8.10.1)没有这个问题。您是否也遇到过旧版本的问题?
-
我不确定是什么原因造成的,但它已经存在了很长时间。在 Boa Constructor 生成的代码中,他们曾经(并且可能仍然会)为应用程序的主框架生成类似“frame.Show(); frame.Hide(); frame.Show()”的行。 IIRC 它与 Boa 执行脚本的方式以及系统设置或快捷方式属性中的某些内容或类似的奇怪事物有关,并且在 Boa 之外运行时没有相同的问题。
-
我在使用 frame.Hide() 和 frame.Show() 时运气不佳,但我发现在显示模态对话框后,所有窗口都突然正常运行。
-
任何人有解决这个问题,因为我有同样的问题?
标签: python macos wxpython py2app