editFinished QlineEdit在editingFinshed事件中执行对话框时第二次发出

时间:2016-05-26 10:58:14

标签: python pyqt

当我将editingFinished的信号QLineEdit连接到包含执行QDialog的函数时,editingFinished的信号QLineEdit为第二次出现了。那个介绍看起来很清楚......下一个例子可以帮助你理解:

from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys

class Foo(QLineEdit):
    def __init__(self):
        super().__init__()
        self.editingFinished.connect(self.editingFinishedEvent)

    def editingFinishedEvent(self):
        dialog = QDialog()
        dialog.exec_()
        print('editing finished event occured !')

app = QApplication(sys.argv)

win = Foo()
win.show()

sys.exit(app.exec_())

该脚本创建并显示QLineEdit。当我编辑QLineEdit的值并按Enter键时,方法editingFinishedEvent应该执行ONCE。如果我删除行dialog.exec_()就属于这种情况。但如果我不这样做,editingFinishedEvent会被执行两次而不是一次。

2 个答案:

答案 0 :(得分:2)

当按下return或enter键或线编辑失去焦点see documentation时,会发出editingFinished信号。通过editingFinishedEvent,焦点从线编辑变为对话框,并且第二次发出信号。您可以改用returnPressed信号。只有在按下return或enter键时才会发出它。

答案 1 :(得分:0)

我认为可以在启动对话框之前先断开插槽,然后再重新连接:

class Foo(QLineEdit):
    def __init__(self):
        super().__init__()
        self.editingFinished.connect(self.editingFinishedEvent)

    def editingFinishedEvent(self):
        # disconnect
        self.editingFinished.disconnect()
        dialog = QDialog()
        dialog.exec_()
        # re-connect
        self.editingFinished.connect(self.editingFinishedEvent)

通过这种方式,聚焦或返回按下都会触发广告位,但只会触发一次。