Форум сайта python.su
Добрый день!
Подскажите пожалуйста такой вопрос: Есть реализованная через QTableWidget таблица заполненная данными. Нужно сделать, чтобы был осуществляен поиск текста введенной в QLineEdit и осуществлен переход к строке содержащей этот текст.
Вывел 2 пути решения:
1. Через встроенный в PySide поиск (метод findItems таблицы) цель находит, но переход отсутствует. Получаю список объектов PySide.QtGui.QTableWidgetItem.
2. Через перевод таблицы в массив строк и поиск (find) в массиве. Получаю массив номеров строк.
Два дня мучаю поисковики и документацию.
Офлайн
setCurrentItem в PySide есть?
можно проще
#!-*-coding:utf8-*- from PyQt4.Qt import * def on_find(): s = edit.text() rows = t.rowCount() cols = t.columnCount() for i in xrange(rows): for j in xrange(cols): txt = t.item(i,j).text() if txt.contains(s): t.item(i,j).setTextColor(QColor(0,0,0)) else: t.item(i,j).setTextColor(QColor(222,222,222)) app = QApplication([]) w = QWidget() t = QTableWidget(w) t.setRowCount(3) t.setColumnCount(4) for i in xrange(3): for j in xrange(4): s= 'blabla' + str(i) + str(j) item = QTableWidgetItem() item.setText(s) t.setItem(i,j,item) t.setSortingEnabled(True) edit = QLineEdit(w) edit.returnPressed.connect(on_find) btnFind = QPushButton(u'Поиск',w) btnFind.clicked.connect(on_find) grid = QGridLayout(w) grid.setMargin(0) grid.addWidget(t,0,0,1,2) grid.addWidget(edit,1,0) grid.addWidget(btnFind,1,1) w.resize(500,300) w.move(0,0) w.show() app.exec_()
Отредактировано vic57 (Апрель 20, 2016 18:48:38)
Офлайн
Спасибо, строки находит. Но не переходит к первой найденной…
Офлайн
а мозги включить?
#-*-coding:utf8-*- from PyQt4.Qt import * def on_find(): s = edit.text() rows = t.rowCount() cols = t.columnCount() first = None for i in xrange(rows): for j in xrange(cols): txt = t.item(i,j).text() if txt.contains(s): t.item(i,j).setTextColor(QColor(0,0,0)) if not first: first = t.item(i,j) else: t.item(i,j).setTextColor(QColor(222,222,222)) t.setCurrentItem(first) # я о чем спрашивал? app = QApplication([]) w = QWidget() t = QTableWidget(w) t.setRowCount(3) t.setColumnCount(4) for i in xrange(3): for j in xrange(4): s= 'blabla' + str(i) + str(j) item = QTableWidgetItem() item.setText(s) t.setItem(i,j,item) t.setSortingEnabled(True) edit = QLineEdit(w) edit.returnPressed.connect(on_find) lbl = QLabel(u'Filter:') grid = QGridLayout(w) grid.setMargin(0) grid.addWidget(t,0,0,1,2) grid.addWidget(lbl,1,0) grid.addWidget(edit,1,1) w.resize(500,300) w.move(0,0) w.show() app.exec_()
Отредактировано vic57 (Апрель 21, 2016 17:45:54)
Офлайн
Да в PySide есть setCurrentItem и нужна была именно эта строчка: t.setCurrentItem(first)
Спасибо
Офлайн