我试图理解为什么在选择其他小部件时会生成QLineEdit“editingFinished”信号。在下面的示例中,选择组合框时会调用“on_lineedit”方法。为什么呢?
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
答案 0 :(得分:1)
来自http://doc.qt.io/archives/qt-4.8/qlineedit.html#editingFinished
按下Return或Enter键或线条编辑失去焦点时会发出此信号。
发出信号是因为它被设计成。您点击的另一个小部件在这里并不真正相关,相关的是线条编辑失去焦点,而这是导致信号发出的小部分。单击另一个小部件只是您的行编辑可能失去焦点的众多方式之一。