Spyder 和 wxPython 之间的冲突?

Posted

技术标签:

【中文标题】Spyder 和 wxPython 之间的冲突?【英文标题】:conflict between Spyder and wxPython? 【发布时间】:2012-06-27 22:23:41 【问题描述】:

我是 wxPython 的新手。从一个简单的教程(http://wiki.wxpython.org/wxPython%20by%20Example)开始,似乎Spyder和wxPython之间存在冲突。 我可以运行以下脚本一次(在 IPython 控制台中),使用:

runfile(r'C:\Python27\Scripts\test\test.py')

其中包含:

import wx

class Frame(wx.Frame):
    def __init__(self, title):
        wx.Frame.__init__(self, None, title=title, size=(350,200))

app = wx.App(redirect=True)
top = Frame("Hello World")
top.Show()
app.MainLoop()

但是我第二次运行它,我得到了以下错误:

Traceback (most recent call last):
  File "<ipython console>", line 1, in <module>
  File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 493, in runfile
execfile(filename, namespace)
  File "C:\Python27\Scripts\test\test.py", line 14, in <module>
top = Frame("Hello World")
  File "C:\Python27\Scripts\test\test.py", line 11, in __init__
wx.Frame.__init__(self, None, title=title, size=(350,200))
  File "C:\Python27\lib\site-packages\wx-2.8-msw-unicode\wx\_windows.py", line 505, in __init__
_windows_.Frame_swiginit(self,_windows_.new_Frame(*args, **kwargs))
PyNoAppError: The wx.App object must be created first!

不是很懂,但是显然和spyder是用wxPython写的,和app.MainLoop()有冲突有关

有人可以确认和/或解释更多吗?

非常感谢,

帕特里克

【问题讨论】:

【参考方案1】:

我怀疑这是因为您试图在交互式解释器会话中运行该示例。该示例实际上是一个带有事件循环的 GUI 应用程序,当您在同一个交互式会话中重复执行它时,它不会表现良好,因为从上次运行中清除前一个应用程序不会完全发生。就像您所经历的那样,它会运行一次,但随后的尝试会失败。这样的示例绝对应该在其自己的专用解释器中运行,该解释器可以在 GUI 关闭时完全退出。

在 Spyder 中,您可以将脚本配置为在专用的独立解释器中运行,而无需在单独的外部控制台中手动运行。在 Spyder 编辑器中打开文件,按 F6 打开“运行设置”对话框,然后选择“在新的专用 Python 解释器中执行”单选按钮。现在点击运行。使用 F5 进行的后续运行将记住此配置设置,并且您将在每次重复执行时在其自己的解释器中运行您的示例。

【讨论】:

非常好,也解决了我的问题,但我必须按 CTRL-F6 才能打开设置对话框(Spider 3.2.3),而不仅仅是 F6。【参考方案2】:

我猜这与使用 IDLE 运行 wxPython 应用程序时可能遇到的问题相同,IDLE 是 Python 附带的基于 tkinter 的 Python IDE。基本上你最终有两个主循环,虽然它有时会工作,但有时它们会发生冲突,你会得到像这样的奇怪错误。我认为当您运行两个 wx.Apps 时,您处于“未定义”领域,这是一件“坏事”。只需从 IPython 本身、命令行或其他不会有两个 wx 事件循环的方式运行您的应用程序。

【讨论】:

你好。谢谢迈克的快速回答。这确实是我目前正在做的事情:保存 *.py 文件并通过“独立”控制台启动它......对于开发来说不是那么用户友好,但我会生存:-) 我现在正在考虑使用 pyDev(插件在 Eclipse 中),这显然不是基于 wxPython 来开发我的 GUI.... 我将把我的发现放在这篇文章中!再次感谢。 您可以使用 Spyder 或 IDLE 进行开发,只是不要在其中运行脚本。我目前使用的是 Wingware 的 IDE。 Komodo 有一个免费版activestate.com/komodo-edit。或者你可以试试 PyDev。我个人不是很喜欢 Eclipse 环境。

以上是关于Spyder 和 wxPython 之间的冲突?的主要内容,如果未能解决你的问题,请参考以下文章

wxPython最简单入门

Opencv与wxpython的集成

wxpython-2

wxpython 的应用

wxpython记

python学习笔记第二阶段 GUI-wxpython