无法在Mac上关闭wxPython窗口

时间:2014-07-31 21:07:34

标签: python macos wxpython enthought

我一直在努力解决我现在意识到的几种不同的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] $

1 个答案:

答案 0 :(得分:2)

这是一个完全不能令人满意的答案,因为我还不了解从根本上发生了什么,但我正在努力,因为它确实解决了我的问题(目前)。我仍然希望其他人能够发布更好的答案,以揭示潜在的问题。

与Jonathan March提议的解决方案直接冲突到我在帖子顶部引用的单独的open question时,当我在Canopy首选项下重新启用PyLab时,这个问题就消失了。我注意到我的所有matplotlib图不再可以互动(旋转的沙滩球光标永远不会消失,我无法放大,旋转等等),我尝试了这个。重新启用PyLab也修复了绘图问题。我目前正在使用PyLab的QT后端,并且没有尝试使用任何其他可用的后端。