Python 选择QCompleter项目后无法清除QLineEdit
在从QCompleter中选择项目后,我无法从QLineEdit中清除文本。我想打印从QCompleter中选择的项目的文本,然后立即清除QLineEdit,我只成功打印了文本,但之后无法清除QLineEdit文本 这是我的代码:Python 选择QCompleter项目后无法清除QLineEdit,python,pyqt4,qlineedit,qcompleter,Python,Pyqt4,Qlineedit,Qcompleter,在从QCompleter中选择项目后,我无法从QLineEdit中清除文本。我想打印从QCompleter中选择的项目的文本,然后立即清除QLineEdit,我只成功打印了文本,但之后无法清除QLineEdit文本 这是我的代码: import sys from PyQt4 import QtGui, QtCore auto_completer_words = ["chair"] def get_data(model): model.setStringList(auto_compl
import sys
from PyQt4 import QtGui, QtCore
auto_completer_words = ["chair"]
def get_data(model):
model.setStringList(auto_completer_words)
class MainWindow(QtGui.QMainWindow):
def __init__(self):
super(self.__class__, self).__init__()
self.resize(300, 300)
self.line_edit = QtGui.QLineEdit(self)
self.line_edit.setGeometry(QtCore.QRect(100, 100, 100, 30))
self.completer = QtGui.QCompleter()
self.line_edit.setCompleter(self.completer)
model = QtGui.QStringListModel()
self.completer.setModel(model)
get_data(model)
self.completer.activated.connect(self.get_data_in_le)
def get_data_in_le(self):
print(self.line_edit.text())
self.line_edit.clear()
def main():
app = QtGui.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
问题在于,在分配值之前会触发激活的
QCompleter
信号,因此在最后clear()
起作用,但在QLineEdit
为空时会将其清除。解决方案是稍后清理,因为可以使用QTimer
:
def get_data_in_le(self):
print(self.line_edit.text())
QtCore.QTimer.singleShot(0, self.line_edit.clear)
问题在于,在分配值之前会触发激活的
QCompleter
信号,因此在最后clear()
起作用,但在QLineEdit
为空时会将其清除。解决方案是稍后清理,因为可以使用QTimer
:
def get_data_in_le(self):
print(self.line_edit.text())
QtCore.QTimer.singleShot(0, self.line_edit.clear)
更好的解决方案是:
self.connect(self.completer, QtCore.SIGNAL("activated(const QString&)"), self.line_edit.clear, QtCore.Qt.QueuedConnection)
更好的解决方案是:
self.connect(self.completer, QtCore.SIGNAL("activated(const QString&)"), self.line_edit.clear, QtCore.Qt.QueuedConnection)