2014-07-31 4 views
1

Я боролся с тем, что я сейчас понимаю, это несколько разных сбоев python и/или приложений, зависающих, когда я пытаюсь интегрировать vtk в gui wxPython. У меня есть отдельный open question, который посвящен отдельному примеру vtk. Я также нашел класс проблем, связанных с правильным удалением объектов vtk во время процесса закрытия окна. Однако, преследуя эти проблемы, я обнаружил, что не могу даже просто закрыть простой wx.Frame!Не удается закрыть окно wxPython на Mac

Следующий простой пример (предоставленный как часть ответа на чужой unrelated question on closing wxPython) не удается закрыть на моем Mac (работает Enthought Canopy 1.4.1.1975 на Mac OSX 10.9.4), но выполняется и закрывается чисто на моей Windows VM (работает с той же версией Canopy).

В частности, нажав красную точку «закрыть» или «Закрыть», wx.Button возвращает элемент управления в подсказку python, встроенную в Canopy, но окно не исчезнет. С помощью кнопки «Закрыть» я вижу, что оператор печати появляется, когда управление проходит через функцию onClose. В обоих случаях перезапуск ядра python (run -> «Restart Kernel ...» в панели меню 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() 

Edit: Я попытался запустить выше сценарий из командной строки (а не через IDE балдахина) и наблюдается следующее:

  • [Non Interactive] Typing "питон simpleClose.py" в командной строке окно запускается, а затем закрывается нормально ко всем видам.

  • [Интерактивный] Ввод «python» в командной строке, за которым следует «execfile (« simpleClose.py »)» в интерактивной подсказке python в окне запуска но не закрывается. После нажатия кнопки закрытия управление возвращается к интерактивной подсказке python (я могу выполнять дополнительные команды), но окно остается открытым. После ввода «exit()», чтобы закрыть интерактивную подсказку python, окно также исчезнет. Если вместо этого, я пытаюсь возобновить тестовое приложение, я получаю Segfault, как показано ниже:

[mac prompt]$ python

Enthought Canopy Python 2.7.6 | 64-bit | (default, Jun 4 2014, 16:42:26) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information.

[python prompt] execfile('simpleClose.py')

onClose

[python prompt] execfile('simpleClose.py')

Traceback (most recent call last):
File "[stdin]", line 1, in [module]
File "simpleClose.py", line 25, in [module] frame = MyFrame() File "simpleClose.py", line 10, in init wx.Frame.init(self, None, title="Close Me") > File "/Users/tanner/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/wx/_windows.py", line 576, in initwindows.Frame_swiginit(self,windows.new_Frame(*args, **kwargs)) wx._core.PyNoAppError: The wx.App object must be created first!

[python prompt] exit()

Segmentation fault: 11

[mac prompt]$

+0

Что такое "python kernel crashes"? Вы имеете в виду, что ваш скрипт Python приводит к сбою ядра вашей ОС, заставляя вас перезагружать компьютер? Или вы имеете в виду ядро ​​в смысле IPython, и вы используете интерпретатор, используемый IPython segfault? Или…? – abarnert

+0

Чтобы уточнить, моя ссылка на «python crashes» была в основном в контексте других проблем, которые я преследовал (и упоминал). Наблюдаемое поведение для приведенного примера просто состоит в том, что окно не исчезает. Тем не менее, я отредактировал свой вопрос, чтобы уточнить и предоставил несколько дополнительных тестовых примеров, один из которых включает segfault.Чтобы явным образом ответить на ваш вопрос, я думаю, что я имею в виду это в смысле iPython, но, честно говоря, я не совсем уверен. Благодарю. – neal

ответ

2

Это совершенно неудовлетворительный ответ, потому что я пока не понимаю, что в основном происходит, но я m, поставив его, потому что он исправил мою проблему (пока). Я все еще надеюсь, что кто-то еще опубликует лучший ответ, который проливает свет на основные проблемы.

В прямом противоречии с предлагаемым решением Джонатана Марша к моему отдельному open question, указанному в верхней части сообщения, эта проблема исчезла, когда я снова включил PyLab в соответствии с предпочтениями Canopy. Я попробовал это после того, как заметил, что все мои графики matplotlib больше не взаимодействуют (вращающийся курсор на пляже не уходил, и я не мог масштабировать, вращать и т. Д.). Повторное включение PyLab также зафиксировало вопрос о сюжете. В настоящее время я использую бэкэнд QT для PyLab и не пробовал использовать какие-либо другие доступные серверы.

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