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,但是为什么?
答案 0 :(得分:1)
如果您选中the docs:
void QLineEdit::editingFinished()
当按下Return或Enter键或 行编辑失去焦点。请注意,如果有一个validator()或 在行编辑中设置inputMask()并按Enter / Return键, 仅当输入遵循以下命令时才会发出editingFinished()信号 inputMask()和Validator()返回QValidator :: Acceptable。
(重点是我的)
在您的情况下,当您按 Enter 时,将显示第一张打印纸;当QLineEdit自QMessageBox获得焦点后失去焦点时,将显示第二张打印纸。