我一直在努力解决我现在意识到的几种不同的python崩溃和/或应用程序挂起,因为我尝试将vtk集成到wxPython gui中。我有一个单独的open question来处理一个独立的vtk示例。我还发现了一些关于在窗口关闭过程中正确删除vtk对象的问题。然而,在追逐这些问题时,我发现我甚至无法干净地关闭一个简单的wx.Frame!
以下简单示例(作为对其他人unrelated question on closing wxPython的答案的一部分提供)无法在我的Mac上关闭(在Mac OSX 10.9.4上运行Enthought Canopy 1.4.1.1975)但运行并且在我的Windows VM上干净地关闭(运行相同的Canopy版本)。
具体来说,点击红色"关闭"点或"关闭" wx.Button将控制返回到集成在Canopy中的python提示符,但窗口不会消失。随着"关闭"按钮我看到print语句出现,因为控件通过onClose函数。在这两种情况下,重新启动python内核(运行 - >"重新启动内核......"在Canopy菜单栏中)会使窗口消失。
由于对上述上一期的问题进行排查,Pylab已被禁用。
import wx
########################################################################
class MyFrame(wx.Frame):
""""""
#----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, None, title="Close Me")
panel = wx.Panel(self)
closeBtn = wx.Button(panel, label="Close")
closeBtn.Bind(wx.EVT_BUTTON, self.onClose)
#----------------------------------------------------------------------
def onClose(self, event):
""""""
print 'onClose'
self.Close()
if __name__ == "__main__":
app = wx.App(False)
frame = MyFrame()
frame.Show()
app.MainLoop()
编辑: 我尝试从命令行运行上面的脚本(而不是通过Canopy的IDE)并观察以下内容:
[非互动]打字" python simpleClose.py"在命令行,窗口启动,然后正常关闭所有外观
[互动]打字" python"在命令行后跟" execfile(' simpleClose.py')"在交互式python提示符下,窗口启动但不关闭。按下关闭按钮后,控件返回到交互式python提示符(我可以执行更多命令),但窗口保持打开状态。输入"退出()"为了关闭交互式python提示,窗口也会消失。如果相反,我尝试重新启动测试应用程序,我会收到如下所示的段错误:
[mac prompt] $ python
Enthought Canopy Python 2.7.6 | 64位| (默认,2014年6月4日, 16:42:26)darwin Type上的[GCC 4.2.1(Apple Inc. build 5666)(第3点)] " help"," copyright"," credit"或"许可证"了解更多信息。
[python prompt] execfile(' simpleClose.py')
的OnClose
[python prompt] execfile(' simpleClose.py')
追踪(最近的呼叫最后):
文件&#34; [stdin]&#34;,第1行,在[module]中 文件&#34; simpleClose.py&#34;,第25行,在[module] frame = MyFrame()中 文件&#34; simpleClose.py&#34;,第10行,在 init wx.Frame。 init (自我,无,标题=&#34;关闭我&# 34;)&gt; File&#34; /Users/tanner/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/wx/_windows.py" ;,第576行, init < em> windows .Frame_swiginit(self, windows .new_Frame(* args,** kwargs))wx._core.PyNoAppError:必须先创建wx.App对象![python prompt] exit()
分段错误:11
[mac prompt] $
答案 0 :(得分:2)
这是一个完全不能令人满意的答案,因为我还不了解从根本上发生了什么,但我正在努力,因为它确实解决了我的问题(目前)。我仍然希望其他人能够发布更好的答案,以揭示潜在的问题。
与Jonathan March提议的解决方案直接冲突到我在帖子顶部引用的单独的open question时,当我在Canopy首选项下重新启用PyLab时,这个问题就消失了。我注意到我的所有matplotlib图不再可以互动(旋转的沙滩球光标永远不会消失,我无法放大,旋转等等),我尝试了这个。重新启用PyLab也修复了绘图问题。我目前正在使用PyLab的QT后端,并且没有尝试使用任何其他可用的后端。