编辑在editFinished事件中执行对话框时,第二次发出QlineEdit的完成

问题描述 投票:1回答:2

当我将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的值并按下回车时,方法editingFinishedEvent应该执行ONCE。如果我删除行dialog.exec_()就是这种情况。但如果我不这样做,editingFinishedEvent会执行两次而不是一次。

python pyqt
2个回答
2
投票

当按下返回或输入键或线编辑失去焦点editingFinished时,会发出see documentation信号。通过editingFinishedEvent,焦点从线编辑变为对话框,信号再次发出。您可以使用returnPressed信号代替。仅在按下返回或输入键时才会发出。


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)

这样,聚焦或返回按下将触发插槽,但仅触发一次。

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