2014-01-29 5 views
1

Я пытаюсь выделить элемент в моем списке при вводе текста в 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) 

ответ

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_())