2017-08-13 3 views
0

Ich versuche, PyQT4-Code in PyQt5 zu konvertieren, der einen neuen Stil von Verbindungssignalen erfordert. Wenn ich benutze:PyQt5-Dialog schließt das Hauptfenster

self.connect(okButton, SIGNAL("clicked()"),form, SLOT("accept()")) 
self.connect(cancelButton, SIGNAL("clicked()"),form, SLOT("reject()")) 

alles funktioniert wie erwartet - mit OK oder Abbrechen, wird Dialogfenster schließen. Mit einem neuen Stil sygnals (wo ich denke, ich etwas falsch mache)

okButton.clicked.connect(self.accept) 
cancelButton.clicked.connect(self.reject) 

nach dem Klicken auf Ok/Abbrechen, wird Hauptfenster schließen und Dialog bleiben. Was definitiv nicht passieren soll.

Was mache ich falsch?

import sys 
from PyQt5.QtWidgets import QDialog, QApplication, QPushButton, QLabel, QHBoxLayout, QVBoxLayout, QGridLayout 
# from PyQt4.QtCore import * 
# from PyQt4.QtGui import * 

class Form(QDialog): 
    def __init__(self, parent=None): 
     super(Form, self).__init__(parent) 
     myButton = QPushButton("open window") 
     self.myFirstLabel = QLabel("First Window") 
     layout = QVBoxLayout() 
     layout.addWidget(myButton) 
     layout.addWidget(self.myFirstLabel) 
     self.setLayout(layout) 
     myButton.clicked.connect(self.openNewWindow) 
     self.setWindowTitle("SecondWindowTest") 

    def openNewWindow(self): 
     myLabel = QLabel("Second Window") 
     okButton = QPushButton("&OK") 
     cancelButton = QPushButton("Cancel") 
     buttonLayout = QHBoxLayout() 
     buttonLayout.addStretch() 
     buttonLayout.addWidget(okButton) 
     buttonLayout.addWidget(cancelButton) 
     layout = QGridLayout() 
     layout.addWidget(myLabel, 0, 0) 
     layout.addLayout(buttonLayout, 1, 1, 1, 2) 
     form = QDialog() 
     form.setLayout(layout) 

     okButton.clicked.connect(self.accept) 
     cancelButton.clicked.connect(self.reject) 
     # self.connect(okButton, SIGNAL("clicked()"),form, SLOT("accept()")) 
     # self.connect(cancelButton, SIGNAL("clicked()"),form, SLOT("reject()")) 

     form.setWindowTitle("Second Window") 
     if form.exec_(): 
      self.myFirstLabel.setText('OK was pressed') 

app = QApplication(sys.argv) 
form = Form() 
form.show() 
app.exec_() 
+0

Was ist Ihr Problem oder eine Frage? – eyllanesc

+0

Problem ist, dass Dialog das Hauptfenster schließt. Ich habe main zur besseren Übersicht bearbeitet. – tmdag

Antwort

1

Das Äquivalent der folgenden Verbindung:

self.connect(okButton, SIGNAL("clicked()"),form, SLOT("accept()")) 
self.connect(cancelButton, SIGNAL("clicked()"),form, SLOT("reject()")) 

Im neuen Stil der Verbindung ist:

okButton.clicked.connect(form.accept) 
cancelButton.clicked.connect(form.reject) 
+0

danke! alles gut jetzt :) – tmdag