2012-06-26 3 views
3

Я новичок в wxPython. Начиная с простого учебника (http://wiki.wxpython.org/wxPython%20by%20Example), кажется, что существует конфликт между Spyder и wxPython. я могу запустить следующий скрипт один раз (в консоли IPython), используя:конфликт между Spyder и wxPython?

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 и конфликта с приложением. MainLoop()

Может кто-нибудь подтвердить и/или объяснить немного больше?

Спасибо большое,

Патрик

ответ

1

Я предполагаю, что это та же самая проблема, что вы можете столкнуться при запуске приложения WxPython с помощью простаивает, то TkInter на основе Python IDE, который поставляется с Python. В основном у вас есть две основные петли, и, хотя она работает иногда, в другое время они вступают в конфликт, и вы получаете такие странные ошибки, как эта. Я думаю, что когда у вас есть два wx.Apps, вы находитесь в «неопределенной» земле, что является «плохой». Просто запустите приложения из самого IPython, командной строки или каким-либо другим способом, где не будет двух циклов событий wx.

+0

Здравствуйте. Спасибо Майку за ваш быстрый ответ. Это действительно то, что я сейчас делаю: сохраняя файл * .py и запуская его через «автономную» консоль ... Не так дружелюбно для разработки, но я выживу :-) Теперь я думаю, используя pyDev (plug- в Eclipse), который, по-видимому, не основан на wxPython для разработки моего графического интерфейса ... Я поместил свои выводы на этот пост! Еще раз спасибо. – sweetdream

+0

Вы можете использовать Spyder или IDLE для разработки, просто не запускайте скрипт изнутри. В настоящее время я использую среду разработки Wingware. Комодо имеет бесплатную версию http://www.activestate.com/komodo-edit. Или вы можете попробовать PyDev. Мне лично не очень нравится среда Eclipse. –

3

Я подозреваю, что это потому, что вы пытаетесь запустить этот пример в сеансе интерактивного интерпретатора. Пример - действительно графическое приложение с циклом событий, и оно не будет вести себя хорошо, когда вы будете повторно выполнять его в том же интерактивном сеансе, так как очистка предыдущего приложения от последнего запуска не произойдет полностью. Как и вы, он будет работать один раз, но последующие попытки потерпят неудачу. Такой пример, безусловно, должен выполняться в собственном специализированном интерпретаторе, который может полностью выйти, когда графический интерфейс закрывается.

В Spyder вы можете настроить сценарий для работы в отдельном автономном интерпретаторе без необходимости запуска вручную на отдельной внешней консоли. Откройте файл в редакторе Spyder, нажмите F6, чтобы открыть диалоговое окно «Параметры запуска», а затем выберите переключатель «Выполнение в новом специализированном интерпретаторе Python». Теперь нажмите Run. Последующие прогоны с использованием F5 запомнят этот параметр конфигурации, и вы получите свой пример, запущенный в своем интерпретаторе с каждым повторным исполнением.

+0

Отличный, я тоже решил проблему, но мне пришлось нажать CTRL-F6, чтобы открыть диалог настроек (Spider 3.2.3), а не только F6. –

Смежные вопросы