Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 20, 2016 15:49:52

astrobeglec
Зарегистрирован: 2015-09-04
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

PySide QTableWidget поиск по таблице

Добрый день!

Подскажите пожалуйста такой вопрос: Есть реализованная через QTableWidget таблица заполненная данными. Нужно сделать, чтобы был осуществляен поиск текста введенной в QLineEdit и осуществлен переход к строке содержащей этот текст.

Вывел 2 пути решения:
1. Через встроенный в PySide поиск (метод findItems таблицы) цель находит, но переход отсутствует. Получаю список объектов PySide.QtGui.QTableWidgetItem.
2. Через перевод таблицы в массив строк и поиск (find) в массиве. Получаю массив номеров строк.

Два дня мучаю поисковики и документацию.

Офлайн

#2 Апрель 20, 2016 18:32:00

vic57
Зарегистрирован: 2015-07-07
Сообщения: 909
Репутация: +  127  -
Профиль   Отправить e-mail  

PySide QTableWidget поиск по таблице

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)

Офлайн

#3 Апрель 21, 2016 16:05:54

astrobeglec
Зарегистрирован: 2015-09-04
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

PySide QTableWidget поиск по таблице

Спасибо, строки находит. Но не переходит к первой найденной…

Офлайн

#4 Апрель 21, 2016 17:38:25

vic57
Зарегистрирован: 2015-07-07
Сообщения: 909
Репутация: +  127  -
Профиль   Отправить e-mail  

PySide QTableWidget поиск по таблице

а мозги включить?

#-*-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)

Офлайн

#5 Апрель 22, 2016 09:12:00

astrobeglec
Зарегистрирован: 2015-09-04
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

PySide QTableWidget поиск по таблице

Да в PySide есть setCurrentItem и нужна была именно эта строчка: t.setCurrentItem(first)

Спасибо

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version