【发布时间】: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信号完全不同,因为它在编辑期间不断发出,但从不在之后发出。