根据文本输入选择突出显示

时间:2014-01-29 14:30:51

标签: pyqt4 highlight qlistwidget qlineedit

我想在LineEdit中输入文本时突出显示列表中的项目,但是,我不仅无法使其工作,而且还没有突出显示列表中的项目。我在某处写错了吗?有什么建议吗?

fruitsList = QListWidget()
list01 = ['Apple','Pear','Orange','Grape','Lychee']
self.fruitsList.addItems(list01)

textInput = QLineEdit()
fruitTxt = str(textInput)

self.connect(self.textInput,('returnPressed()'), self.updateSelect)

def updateSelect(self):
    self.fruitsList.findItems(str(fruitTxt), flags = Qt.MatchExactly)
    self.fruitsList.setCurrentIndex(0)

1 个答案:

答案 0 :(得分:0)

您发布的代码存在一些问题。

信号连接应使用QtCore.SIGNAL('returnPressed()')。但是使用new-style syntax会更好,这更容易出错。

您的信号处理程序也存在一些问题。您需要使用行编辑的text()方法来检索当前文本,并使用findItems()的返回值来选择列表中的项目。

这是一个小型演示,展示了如何完成它:

from PyQt4 import QtCore, QtGui

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.fruitsList = QtGui.QListWidget(self)
        items = 'Apple Pear Orange Grape Lychee'.split()
        self.fruitsList.addItems(items)
        self.textInput = QtGui.QLineEdit(self)
        self.textInput.returnPressed.connect(self.updateSelect)
        self.textInput.setFocus()
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.fruitsList)
        layout.addWidget(self.textInput)

    def updateSelect(self):
        self.fruitsList.clearSelection()
        for item in self.fruitsList.findItems(
            self.textInput.text(), QtCore.Qt.MatchFixedString):
            item.setSelected(True)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.setGeometry(500, 300, 300, 200)
    window.show()
    sys.exit(app.exec_())