为什么QLineEdit小部件在激活其他小部件时会生成“editingFinished”信号?

时间:2018-01-29 23:30:27

标签: python pyqt5 qlineedit

我试图理解为什么在选择其他小部件时会生成QLineEdit“editingFinished”信号。在下面的示例中,选择组合框时会调用“on_lineedit”方法。为什么呢?

ui example

class Test:
    def __init__(self,name):
        self.name = name
        self.r = str

    def tester(self):
        print('hello')
        print(self.name)

r = Test('pascal')
r.tester()

我知道通过连接“textChanged”信号而不是像这样的“editingFinished”信号可以避免这个问题:

import sys
from PyQt5 import QtWidgets

class MyApp(QtWidgets.QDialog):
    def __init__(self, *args):
        super().__init__(*args)
        # create combobox:
        combobox = QtWidgets.QComboBox(self)
        combobox.addItems(['Item 1', 'Item 2'])
        # create line edit
        lineedit = QtWidgets.QLineEdit(self)
        lineedit.editingFinished.connect(self.on_lineedit)
        # layout:
        vbox = QtWidgets.QVBoxLayout()
        vbox.addWidget( combobox )
        vbox.addWidget( lineedit )
        self.setLayout(vbox)

    def on_lineedit(self):
        print('on_lineedit')

app    = QtWidgets.QApplication(sys.argv)
window = MyApp()
window.show()
sys.exit(app.exec_())

我在其他地方看到了类似的问题(下面的链接),但我仍然不明白为什么选择组合框时会产生“editingFinished”信号。

Qt qspinbox editingFinished signal on value changed

Suppress QLineEdit editingFinished signal when certain button is clicked

1 个答案:

答案 0 :(得分:1)

来自http://doc.qt.io/archives/qt-4.8/qlineedit.html#editingFinished

  

按下Return或Enter键或线条编辑失去焦点时会发出此信号。

发出信号是因为它被设计成。您点击的另一个小部件在这里并不真正相关,相关的是线条编辑失去焦点,而这是导致信号发出的小部分。单击另一个小部件只是您的行编辑可能失去焦点的众多方式之一。