Простой пример IPython вызывает исключение в sys.exit()

Я делаю несколько очень простых руководств по PySide (и PyQt) в IPython. В одном руководстве просто создается окно с несколькими ползунками для демонстрации слотов и сигналов.

Когда я закрываю окно работающего демонстрационного приложения, я вижу эту ошибку:

An exception has occurred, use %tb to see the full traceback.
SystemExit: 0
To exit: use 'exit', 'quit', or Ctrl-D.

Итак, я запускаю %tb и получаю следующее:

SystemExit                                Traceback (most recent call last)
/Workspaces/scratch/<ipython-input-1-88966dcfb499> in <module>()
     33 
     34 if __name__ == "__main__":
---> 35     main()

/Workspaces/scratch/<ipython-input-1-88966dcfb499> in main()
     29         w.show()
     30         app.exec_()
---> 31         sys.exit(0)
     32 
     33 

SystemExit: 0

Если я попытаюсь выполнить свой код еще раз, я получу следующее:

RuntimeError: A QApplication instance already exists.

Если это поможет, вот мой код:

from PySide.QtCore import *
from PySide.QtGui import *
import sys

class MyWindow(QWidget):
    def __init__(self):
        QWidget.__init__(self, None)

        vbox = QVBoxLayout(self)

        self.slider1 = QSlider(Qt.Horizontal)
        self.slider1.setRange(0, 99)
        self.slider1.setValue(0)
        vbox.addWidget(self.slider1)

        self.slider2 = QSlider(Qt.Horizontal)
        self.slider2.setRange(0, 99)
        self.slider2.setValue(99)
        vbox.addWidget(self.slider2)

        self.slider1.valueChanged.connect(self.slider2Changed)

    def slider2Changed(self, position):
        self.slider2.setValue(self.slider2.maximum() - position)

def main():
        app = QApplication(sys.argv)
        w = MyWindow()
        w.show()
        app.exec_()
        sys.exit(0)

if __name__ == "__main__":
    main()

У меня нет ошибок при запуске кода с использованием python:

python myexample.py

Эта ошибка возникает только тогда, когда я запускаю код в IPython (включая блокнот, qtconsole или обычный ipython). Терминал).

ОБНОВЛЕНИЕ: Моя основная проблема заключается в том, что я не могу снова быстро и легко запустить приложение. Если я попытаюсь запустить свой код еще раз, я получу следующее:

RuntimeError: A QApplication instance already exists.

Это убивает быструю интерактивную природу IPython :(

11
задан minrk 5 June 2012 в 02:50
поделиться