如何在不触发信号的情况下清空QLineEdit

3 投票
2 回答
2867 浏览
提问于 2025-04-21 00:07

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 呢?这个方法在文本是通过程序改变的时候不会发出信号。

撰写回答