如何在不触发信号的情况下清空QLineEdit
QLineEdit
是一个用于输入文本的控件,当你使用 .clear()
方法清空文本或者使用 .setText()
方法设置新文本时,它会发出一个信号。这意味着每次你调用这两个方法时,都会触发一个事件。如果你不想让这个事件被触发,就需要先用 .blockSignals(True)
来阻止信号,然后再用 .blockSignals(False)
来恢复信号的发送。我在想,是否有其他方法可以避免这样做呢?
from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])
class LineEdit(QtGui.QLineEdit):
def __init__(self, *args, **kwargs):
super(LineEdit, self).__init__()
self.setText('Some Text')
self.textChanged.connect(self.printMessage)
self.show()
def printMessage(self):
print 'Triggered!'
line=LineEdit()
line.clear()
sys.exit(app.exec_())
2 个回答
0
上面的回答可能更好,但在某些情况下,这个解决方案也可能有用:
def function_that_doesnt_trigger_textchanged(self):
self.in_this_function = True
self.textbox.change_text()
self.in_this_function = False
def on_text_changed(self):
if self.in_this_function:
return
do_thing_on_text_changed()
7
你有没有想过使用 QLineEdit::textEdited
呢?这个方法在文本是通过程序改变的时候不会发出信号。