【问题标题】:How do I customize dialog signal/slot in pyQT?如何在 pyQT 中自定义对话框信号/插槽?
【发布时间】:2020-02-18 01:38:24
【问题描述】:

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

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()"))

我不确定要发射什么。我不想只是关闭这个东西。当我按下X 时,我知道如何创建QMessageBox。我想在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() 方法。

【问题讨论】:

    标签: python pyqt pyqt4


    【解决方案1】:

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

    super(NameOfClass, self).reject()
    

    或将您的插槽名称更改为其他名称并使用:

    self.reject()
    

    在那里。

    【讨论】:

      【解决方案2】:

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

      例如:

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

      【讨论】:

        【解决方案3】:

        让我们重写 accept() 函数。

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

        【讨论】:

          猜你喜欢
          • 2012-07-13
          • 1970-01-01
          • 2020-10-05
          • 1970-01-01
          • 2011-11-23
          • 2011-08-16
          • 2011-08-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多