einfache IPython Beispiel wirft Ausnahme auf sys.exit()
Ich bin dabei einige sehr einfache PySide (und PyQt) tutorials in IPython. Ein tutorial erstellt nur ein Fenster mit einigen Schiebereglern, um zu demonstrieren, slots und Signale.
Wenn ich schließen Sie das Fenster der Laufenden demo-Anwendung, sehe ich diese Fehlermeldung:
An exception has occurred, use %tb to see the full traceback.
SystemExit: 0
To exit: use 'exit', 'quit', or Ctrl-D.
Also ich betreibe %tb und erhalten Sie diese:
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
Wenn ich versuche zu führen, meinen code wieder, bekomme ich dies:
RuntimeError: A QApplication instance already exists.
Falls es hilft, hier mein code:
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()
Ich habe keine Fehler beim ausführen der code mit python:
python myexample.py
Dieser Fehler passiert nur wenn ich den code auszuführen, der in einem IPython (darunter ein notebook oder dem qtconsole oder die regelmäßige ipython-terminal).
UPDATE: Mein Hauptproblem ist, dass ich kann nicht führen Sie die Anwendung wieder einfach und schnell. Wenn ich versuche meinen code erneut ein, bekomme ich diese:
RuntimeError: A QApplication instance already exists.
Tötet die schnelle, interaktive Natur von IPython 🙁
InformationsquelleAutor MountainX | 2012-06-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie tun müssen, ist, um die Ursache zu QApplication um später wieder gelöscht werden, wie in:
Mithilfe dieses Codes können Sie wiederholen Sie die Anwendung so oft wie Sie wollen in IPython, und anderswo, und jedes mal, wenn Sie in der Nähe Ihrer qt-Anwendung ist, wird das Objekt gelöscht, in python.
InformationsquelleAutor Ali B
Diese Antwort ist Dank Matthias BUSSONNIER aus der ipython-users-mailing-Liste.
Einfach nicht mit sys.exit(0), wie Sie nicht verlassen python, aber noch läuft IPython.
Fügen Sie es zurück, wenn Sie möchten, führen Sie Ihre app von einem (real -) Kommandozeilen-und eine return-status.
Dies ist ein PySide Fehler, dass Sie "won' T fix", da Sie nicht halten es für einen Fehler.
Sehen https://github.com/ipython/ipython/issues/1124)
und http://bugs.pyside.org/show_bug.cgi?id=855
Können Sie diesen code verwenden aus oben genannten Probleme :
War dies eine ausreichende Lösung für meine jetzigen Bedürfnisse.
InformationsquelleAutor MountainX
sys.exit
nur erhöhtSystemExit
zu beenden, die interperter.ipython fängt
SysExit
wenn es ausgeführt wird ein Skript im interaktiven Modus, so ist dies nicht eigentlich ein Fehler, sondern ein feature von ipython tun, vermeiden Sie den interaktiven interpreter wird Herunterfahren, wenn ein Skript ausgeführt wird, das ist nicht, was Sie wollen in der Regel in einer interaktiven Sitzung.RuntimeError: A QApplication instance already exists.
Das hat zu tun mit Qt. Sie können nicht zwei QApplications zur gleichen Zeit ausgeführt. Der sicherste Weg, ist , starten Sie den interpreter. Ich habe nur versucht, es mit PyQt4 und es scheint zu funktionieren, wenn ich löschen Sie alle Verweise auf die alte QApplication vor dem erstellen eines neuen. Aber meistens bist du nicht eigentlich einen anderen QApplication im gleichen Prozess.
Gut, wenn ich in der Nähe meiner Bewerbung, ich erwarte nicht, dass die Dolmetscher, um es laufen zu halten oder Verweise auf Sie. So etwas ist gebrochen. Der Neustart der kernel ist keine gute Lösung, weil es tötet iPython die Produktivität.
InformationsquelleAutor mata