如何在pyQT中自定义对话框信号/插槽?

时间:2012-04-13 22:13:08

标签: python pyqt pyqt4

我有一组按钮,确定和取消

buttonBox = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Ok|
                                    QtGui.QDialogButtonBox.Cancel)

点击Cancel

时,我想要一个对话提示
self.connect(buttonBox, SIGNAL("rejected()"),
                            self, SLOT("reject()"))
    def reject(self):
        print 'hello'
        self.emit(SIGNAL("reject()"))

我不确定要发射什么。我不想只是关闭这件事。当我按QMessageBox时,我知道如何创建X。我想在reject中进行提示和结束。

我希望这是有道理的。感谢。


为了您的信息,当我按X关闭整个应用程序时,我有一个覆盖方法

def closeEvent(self, event):
    reply = QtGui.QMessageBox.question(self, 'Message', 'Are you sure to quit?', QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
    if reply == QtGui.QMessageBox.Yes:
        event.accept()
    else:
        event.ignore()

此覆盖self.close()方法。

3 个答案:

答案 0 :(得分:1)

你不发射任何东西。 QDialog有一个reject()位,可将返回码设置为Rejected并关闭对话框。你需要打电话给那个。您也将自定义插槽命名为reject,从而覆盖它。你仍然可以这样称呼它:

super(NameOfClass, self).reject()

或将您的广告位名称更改为其他内容并使用:

self.reject()

在那里。

答案 1 :(得分:0)

您可能想要覆盖QDialog类的accept()函数。

例如:

def accept(self):
    if your_validation_userconfirmation_fct():
        self.done(QtWidgets.QDialog.Accepted)

答案 2 :(得分:0)

让我们覆盖accept()函数。

def accept(self):
    if validation_ok():
        super().accept()