我正在 IPython 中做一些非常简单的 PySide(和 PyQt)教程。一个教程只是创建了一个带有一些滑块的窗口来演示插槽和信号。
当我关闭正在运行的演示应用程序的窗口时,我看到了这个错误:
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 的快速、交互性 :(