当连接的插槽显示QMessageBox时,为什么editFinished信号会生成两次?

问题描述 投票:0回答:1
from PySide2 import QtWidgets


class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.lineEdit = QtWidgets.QLineEdit()
        self.lineEdit.setText("1")
        self.lineEdit.editingFinished.connect(self.check)
        self.lineEdit2 = QtWidgets.QLineEdit()
        vlay = QtWidgets.QVBoxLayout(self)
        vlay.addWidget(self.lineEdit)
        vlay.addWidget(self.lineEdit2)

    def check(self):
        if self.lineEdit.text() == "1":
            popup = QtWidgets.QMessageBox(self)
            popup.setWindowTitle("why")
            popup.show()
            print("test")


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

因此,在此脚本中,如果在编辑“ lineEdit”时按“ Enter”,则“ check”插槽将被调用两次。但是,如果您单击“ lineEdit2”,则该插槽将仅被调用一次。发生这种情况是由于QMessageBox,但是为什么呢?

python pyside2
1个回答
0
投票

如果您勾选the docs

void QLineEdit::editingFinished()

当按下Return或Enter键或行编辑失去焦点。请注意,如果有一个validator()或在行编辑中设置inputMask()并按Enter / Return键,仅当输入遵循以下命令时才会发出editingFinished()信号inputMask()和Validator()返回QValidator :: Acceptable。

(我的重点)

在您的情况下,当您按Enter时将给出第一张打印,而当QLineEdit由于QMessageBox获得焦点而失去焦点时,将给出第二张打印。

© www.soinside.com 2019 - 2024. All rights reserved.