Python wx.ProgressDialog+;py2exe导致应用程序崩溃

Python wx.ProgressDialog+;py2exe导致应用程序崩溃,python,wxpython,wxwidgets,py2exe,Python,Wxpython,Wxwidgets,Py2exe,这段简单的代码运行得非常好: import wx app = wx.App(0) frame = wx.Frame(None) test = wx.ProgressDialog('Test', 'Test', maximum = 20, parent = frame, style = wx.PD_CAN_ABORT) app.MainLoop() 但是,当使用py2exe将其编译/打包为可执行文件时 from distutils.core import setup import py2exe

这段简单的代码运行得非常好:

import wx
app = wx.App(0)
frame = wx.Frame(None)
test = wx.ProgressDialog('Test', 'Test', maximum = 20, parent = frame, style = wx.PD_CAN_ABORT)
app.MainLoop()
但是,当使用
py2exe
将其编译/打包为可执行文件时

from distutils.core import setup
import py2exe
setup(script_args = ['py2exe'], windows=[{'script':'progressdlgprobblem.py'}],  
   options = {'py2exe': {'compressed':1,'bundle_files': 1}}, zipfile = None)
。。。然后,
.exe
文件崩溃

这次事故的原因可能是什么?
wx.ProgressDialog
是否需要一些特定的附加元素才能与
py2exe
一起使用?


附录1:当我删除
style=wx.PD\u CAN\u ABORT
时,不会再有崩溃。崩溃怎么可能来自
风格
? 但是,从
.exe
启动时,样式是XP样式:

与从
.py
启动时获得的样式不同(不带py2exe):


附录2:当我删除
'bundle_files:1
时,不再发生崩溃。 但我想保持这个捆绑成一个文件只此绑定到单个.exe文件中怎么会导致此崩溃?


附录3:大部分问题都是通过使用wx.Python 3.0.1.0b而不是3.0.0.0(稍后会有更多详细信息)来解决的。

ProgressDialog
示例中出现问题,并添加了进度和清理,但在其他方面没有改变

# -*- coding: utf-8 -*-
import wx
app = wx.App(0)
frame = wx.Frame(None)
max_count = 8
dlg = wx.ProgressDialog('Test caption', 'Test text', maximum = max_count, parent = frame, style = wx.PD_CAN_ABORT)

keepGoing = True # progress routine from wxPython demo
count = 0

while keepGoing and count < max_count:
    count += 1
    wx.MilliSleep(125)
    wx.Yield()
    (keepGoing, skip) = dlg.Update(count, 'progress: {0} %'.format(count * 100.0/max_count))        

dlg.Destroy() # proper cleanup otherwise process has to be killed
frame.Destroy()

app.MainLoop()
至少在我的机器上(WinXP 7+wxPython 2.9.5.0),此设置(
python setup.py py2exe
)会产生:

  • 单个
    .EXE
  • 冻结时也要更正主题
  • 无崩溃,完全可用,使用您喜欢的样式标志
该示例至少可以在您的机器上运行(已经安装了
MSCV
运行时)。有关更完整的排除列表,请参阅[wxPython users]
https://groups.google.com/forum/#!主题/wxpython用户/vrd-0cpiH1E

该库已经包含了针对这一怪癖的修复程序,并为
wx
-应用程序提供实时更新,但您可能喜欢也可能不喜欢它正在设置的不同项目结构

旁注:我无法在wxPython 2.9.5.0上重现您的崩溃(即使没有装配)。在Win8机器上用3.0.0.0冻结时,我在XP上遇到了崩溃,但根据Robin的说法,这应该在3.0.1中解决(请参见
https://groups.google.com/forum/#!topic/wxpython users/8OeBfxTC9Xo


旁注2:这似乎是wxPython 3.0.0.0(经典)的一个问题。在我的XP机器上,这个示例即使没有冻结也会崩溃。如果升级到,则会再次工作(解冻和py2exe'd)。冻结的单个文件
EXE
在具有正确主题的Windows8、64位和WinXP上运行时没有问题。

ProgressDialog
示例中出现问题,并添加了进度和清理,但在其他方面没有改变

# -*- coding: utf-8 -*-
import wx
app = wx.App(0)
frame = wx.Frame(None)
max_count = 8
dlg = wx.ProgressDialog('Test caption', 'Test text', maximum = max_count, parent = frame, style = wx.PD_CAN_ABORT)

keepGoing = True # progress routine from wxPython demo
count = 0

while keepGoing and count < max_count:
    count += 1
    wx.MilliSleep(125)
    wx.Yield()
    (keepGoing, skip) = dlg.Update(count, 'progress: {0} %'.format(count * 100.0/max_count))        

dlg.Destroy() # proper cleanup otherwise process has to be killed
frame.Destroy()

app.MainLoop()
至少在我的机器上(WinXP 7+wxPython 2.9.5.0),此设置(
python setup.py py2exe
)会产生:

  • 单个
    .EXE
  • 冻结时也要更正主题
  • 无崩溃,完全可用,使用您喜欢的样式标志
该示例至少可以在您的机器上运行(已经安装了
MSCV
运行时)。有关更完整的排除列表,请参阅[wxPython users]
https://groups.google.com/forum/#!主题/wxpython用户/vrd-0cpiH1E

该库已经包含了针对这一怪癖的修复程序,并为
wx
-应用程序提供实时更新,但您可能喜欢也可能不喜欢它正在设置的不同项目结构

旁注:我无法在wxPython 2.9.5.0上重现您的崩溃(即使没有装配)。在Win8机器上用3.0.0.0冻结时,我在XP上遇到了崩溃,但根据Robin的说法,这应该在3.0.1中解决(请参见
https://groups.google.com/forum/#!topic/wxpython users/8OeBfxTC9Xo


旁注2:这似乎是wxPython 3.0.0.0(经典)的一个问题。在我的XP机器上,这个示例即使没有冻结也会崩溃。如果升级到,则会再次工作(解冻和py2exe'd)。冻结的单个文件
EXE
在具有正确主题的Windows8、64位和WinXP上运行时没有问题。

ProgressDialog
示例中出现问题,并添加了进度和清理,但在其他方面没有改变

# -*- coding: utf-8 -*-
import wx
app = wx.App(0)
frame = wx.Frame(None)
max_count = 8
dlg = wx.ProgressDialog('Test caption', 'Test text', maximum = max_count, parent = frame, style = wx.PD_CAN_ABORT)

keepGoing = True # progress routine from wxPython demo
count = 0

while keepGoing and count < max_count:
    count += 1
    wx.MilliSleep(125)
    wx.Yield()
    (keepGoing, skip) = dlg.Update(count, 'progress: {0} %'.format(count * 100.0/max_count))        

dlg.Destroy() # proper cleanup otherwise process has to be killed
frame.Destroy()

app.MainLoop()
至少在我的机器上(WinXP 7+wxPython 2.9.5.0),此设置(
python setup.py py2exe
)会产生:

  • 单个
    .EXE
  • 冻结时也要更正主题
  • 无崩溃,完全可用,使用您喜欢的样式标志
该示例至少可以在您的机器上运行(已经安装了
MSCV
运行时)。有关更完整的排除列表,请参阅[wxPython users]
https://groups.google.com/forum/#!主题/wxpython用户/vrd-0cpiH1E

该库已经包含了针对这一怪癖的修复程序,并为
wx
-应用程序提供实时更新,但您可能喜欢也可能不喜欢它正在设置的不同项目结构

旁注:我无法在wxPython 2.9.5.0上重现您的崩溃(即使没有装配)。在Win8机器上用3.0.0.0冻结时,我在XP上遇到了崩溃,但根据Robin的说法,这应该在3.0.1中解决(请参见
https://groups.google.com/forum/#!topic/wxpython users/8OeBfxTC9Xo


旁注2:这似乎是wxPython 3.0.0.0(经典)的一个问题。在我的XP机器上,这个示例即使没有冻结也会崩溃。如果升级到,则会再次工作(解冻和py2exe'd)。冻结的单个文件
EXE
在具有正确主题的Windows8、64位和WinXP上运行时没有问题。

ProgressDialog
示例中出现问题,并添加了进度和清理,但在其他方面没有改变

# -*- coding: utf-8 -*-
import wx
app = wx.App(0)
frame = wx.Frame(None)
max_count = 8
dlg = wx.ProgressDialog('Test caption', 'Test text', maximum = max_count, parent = frame, style = wx.PD_CAN_ABORT)

keepGoing = True # progress routine from wxPython demo
count = 0

while keepGoing and count < max_count:
    count += 1
    wx.MilliSleep(125)
    wx.Yield()
    (keepGoing, skip) = dlg.Update(count, 'progress: {0} %'.format(count * 100.0/max_count))        

dlg.Destroy() # proper cleanup otherwise process has to be killed
frame.Destroy()

app.MainLoop()
至少在我的机器上(WinXP 7+wxPython 2.9.5.0),此设置(
python setup.py py2exe
)会产生: