Python: Wie Schließen (oder beenden) Python-Prozess Nach QMainWindow Dialog wird geschlossen
Gibt es zwei .py Dateien im selben Ordner:
dialog_01.py and dialog_02.py
Beide Dateien sind Kopie der jeweils anderen. Beide bauen eine einfache QMainWindow dialog-Fenster mit zwei Schaltflächen: "Ok" und "Abbrechen".
Klick auf " Ok " - Schaltfläche schließt das aktuell geöffnete dialog-Fenster und öffnet ein anderes. Also, wenn Dialog_01 Schaltfläche Ok geklickt wird die dialog_01 geschlossen ist und dialog_02 wird geöffnet. Wenn Dialog_02 Schaltfläche Ok geklickt wird, dann dialog_02 geschlossen ist und dialog_01 geöffnet wird und so weiter.
BEARBEITET FRAGE:
Schließen Sie das Dialogfeld Blätter Python-Prozess läuft noch im hintergrund (es kann sein gesehen in OS x Activity Monitor oder Windows Task-Manager).
Wie stellen Sie sicher, dass die Python-Prozess ist beendet, nachdem das dialog-Fenster geschlossen ist?
dialog_01.py
import sys, os
from PyQt4 import QtCore, QtGui
if 'app' not in globals().keys(): app = QtGui.QApplication(sys.argv)
class Dialog_01(QtGui.QMainWindow):
def __init__(self):
super(QtGui.QMainWindow,self).__init__()
myQWidget = QtGui.QWidget()
myBoxLayout = QtGui.QVBoxLayout()
Cancel_button = QtGui.QPushButton("Cancel")
Cancel_button.clicked.connect(self.Cancel)
myBoxLayout.addWidget(Cancel_button)
Button_01 = QtGui.QPushButton("Press to close this dialog and open Dialog 02")
Button_01.clicked.connect(self.callAnotherQMainWindow)
myBoxLayout.addWidget(Button_01)
myQWidget.setLayout(myBoxLayout)
self.setCentralWidget(myQWidget)
self.setWindowTitle('Dialog 01')
def callAnotherQMainWindow(self):
from dialog_02 import Dialog_02
self.close()
self.dialog_02 = Dialog_02()
self.dialog_02.show()
self.dialog_02.raise_()
def Cancel(self):
self.close()
def closeEvent(self):
self.deleteLater()
if __name__ == '__main__':
dialog_1 = Dialog_01()
dialog_1.show()
dialog_1.resize(480,320)
sys.exit(app.exec_())
dialog_02.py
import sys, os
from PyQt4 import QtCore, QtGui
if 'app' not in globals().keys(): app = QtGui.QApplication(sys.argv)
class Dialog_02(QtGui.QMainWindow):
def __init__(self):
super(QtGui.QMainWindow,self).__init__()
myQWidget = QtGui.QWidget()
myBoxLayout = QtGui.QVBoxLayout()
Cancel_button = QtGui.QPushButton("Cancel")
Cancel_button.clicked.connect(self.Cancel)
myBoxLayout.addWidget(Cancel_button)
Button_02 = QtGui.QPushButton("Press to close this dialog 02 and re-open Dialog 01")
Button_02.clicked.connect(self.callAnotherQMainWindow)
myBoxLayout.addWidget(Button_02)
myQWidget.setLayout(myBoxLayout)
self.setCentralWidget(myQWidget)
self.setWindowTitle('Dialog 02')
def callAnotherQMainWindow(self):
from dialog_01 import Dialog_01
self.close()
self.dialog_01 = Dialog_01()
self.dialog_01.show()
self.dialog_01.raise_()
def Cancel(self):
self.close()
def closeEvent(self):
self.deleteLater()
if __name__ == '__main__':
dialog_2 = Dialog_02()
dialog_2.show()
dialog_2.resize(480,320)
sys.exit(app.exec_())
InformationsquelleAutor alphanumeric | 2014-03-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überschreiben der closeEvent () - Funktion des QtGui.QMainWindow Klassen wie folgt:
Diese schien zu funktionieren:
Entfernen:
und so:
...von dialog2-Datei hat den trick.
Versuchen Sie es jetzt mit meinem edit oben
Ich habe gerade bearbeitet einen code geschrieben in der ursprünglichen Frage mit den Linien, die Sie vorgeschlagen, im Ort. Bitte werfen Sie einen Blick... da bin ich noch immer die gleichen Fehler auf Argumente: TypeError: closeEvent() takes exactly 1 argument (2 given)
Okay hatte gehofft, dass es war, Teste ich den code jetzt zu sehen, ob ich finden kann, das problem, vielleicht ist Sie einfach etwas fehlt mir.
Ich denke, es muss eine eingehende argument erklärt wie : def closeEvent(self, event): self.deleteLater() .... aber das lässt immer noch die Python-Prozess läuft...
InformationsquelleAutor Andy Downs
Hier ist das Beispiel.
dialog_01.py
dialog_02.py
InformationsquelleAutor alphanumeric