【问题标题】:Why does a QLineEdit widget generate an "editingFinished" signal when other widgets are activated?为什么 QLineEdit 小部件在激活其他小部件时会生成“editingFinished”信号?
【发布时间】:2018-01-29 23:30:26
【问题描述】:

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

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_())

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

lineedit.textChanged.connect(self.on_lineedit)

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

Qt qspinbox editingFinished signal on value changed

Suppress QLineEdit editingFinished signal when certain button is clicked

【问题讨论】:

  • 我只在焦点放在 QLineEdit 中然后按下 QComboBox 时才使用该行为,并且 editingFinished 广播是合适的,因为当我将焦点放在 QLineEdit 中时编辑开始并在我更改时结束焦点到另一个小部件。你能描述一下这种行为是如何发生的吗?您的描述不明确。
  • 之所以如此,是因为填写表单的人在完成对当前字段的编辑后会跳到下一个字段(但他们可能并不总是在这样做之前按回车键/回车键)。 textChanged 信号完全不同,因为它在编辑期间不断发出,但从不在之后发出。

标签: python pyqt5 qlineedit


【解决方案1】:

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

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

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

【讨论】:

  • 第一次点击就清楚了,但是为什么lineEdit在点击其他小部件后仍然保持焦点?
  • @ToddP 我认为组合框的默认焦点策略是Qt.NoFocus,因此焦点返回到行编辑。您可能想研究一个稍微复杂一点的示例,其中您有一个组合框和两行编辑,以查看哪个在何时发出 editingFinished 信号,以及焦点如何根据焦点策略(您可以更改)返回每个小部件。
猜你喜欢
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
相关资源
最近更新 更多