2017-08-13 286 views
0

我想将PyQT4代码转换为PyQt5,它需要连接信号的新风格。 当我使用:PyQt5对话框关闭主窗口

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

一切正常 - 通过单击确定或取消,对话窗口将关闭。随着新的风格sygnals(其中我想我做错了什么)

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

点击确定后/取消,主窗口将关闭,对话框将保持。这绝对不是应该发生的事情。

我在做什么错?

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

什么您的问题或问题是什么? – eyllanesc

+0

问题在于对话框关闭主窗口。为了清晰我已经编辑过主要内容 – tmdag

回答

1

以下连接的等效:

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

在连接的新的风格是:

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

谢谢!现在都好了:) – tmdag