当在editingFinshed even中执行对话框时,第二次发出QlineEdit的editingFinished

2024-09-30 12:30:50 发布

您现在位置:Python中文网/ 问答频道 /正文

当我将QLineEdit的信号editingFinished连接到包含执行QDialog的函数时,QLineEdit的信号editingFinished会再次发出。那个介绍看起来不太清楚。。。下一个例子将帮助您理解:

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方法应该执行一次。如果我删除dialog.exec_()行,就会出现这种情况。但是如果不这样做,editingFinishedEvent将执行两次而不是一次。在


Tags: fromimportselffoo信号initdefsys
2条回答

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

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)

这样,无论是焦点输出还是返回按下都会触发插槽,但只会触发一次。在

当按下return或enter键或line edit失去焦点时,editingFinished信号被发出。通过editingFinishedEvent焦点从行编辑变为对话框,信号再次发射。您可以使用returnPressed信号。只有在按下回车键或回车键时才会发出。在

相关问题 更多 >

    热门问题