2017-08-13 1 views
0

J'essaie de convertir le code PyQT4 en PyQt5, ce qui nécessite un nouveau style de signaux de connexion. Quand j'utilise:Boîte de dialogue PyQt5 ferme la fenêtre principale

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

tout fonctionne comme prévu - en cliquant sur OK ou Annuler, la fenêtre de dialogue se fermera. Avec un nouveau sygnals de style (où je suppose que je fais quelque chose de mal)

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

après avoir cliqué sur OK/Annuler, la fenêtre principale se ferme et boîte de dialogue restera. Ce qui n'est définitivement pas ce qui devrait arriver.

Qu'est-ce que je fais mal?

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

Quel est votre problème ou une question? – eyllanesc

+0

problème est que la boîte de dialogue ferme la fenêtre principale. J'ai édité le principal pour plus de clarté. – tmdag

Répondre

1

L'équivalent de la liaison suivante:

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

Dans le nouveau style de connexion est:

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

merci! tout va bien maintenant :) – tmdag