当我将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
会执行两次而不是一次。
当按下返回或输入键或线编辑失去焦点editingFinished
时,会发出see documentation信号。通过editingFinishedEvent
,焦点从线编辑变为对话框,信号再次发出。您可以使用returnPressed
信号代替。仅在按下返回或输入键时才会发出。
我想可以在启动对话框之前断开插槽,然后重新连接:
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)
这样,聚焦或返回按下将触发插槽,但仅触发一次。