Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 13, 2017 15:20:39

Kyrym
Зарегистрирован: 2016-12-28
Сообщения: 225
Репутация: +  3  -
Профиль   Отправить e-mail  

PyQt 4 | QTableView + фильтры

А как вообще вытащить данные из ячеек таблицы?

Пытаюсь получить список всех строк выбранного столбца. Проблема в том, что данные надо брать из сортированной таблицы, которая с первоначальным “массивом данных” не совпадает.

Отредактировано Kyrym (Дек. 13, 2017 15:23:03)

Офлайн

#2 Дек. 13, 2017 15:40:15

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

PyQt 4 | QTableView + фильтры

Kyrym
А как вообще вытащить данные из ячеек таблицы?
данные нужно вытаскивать из модели
 model = self.table.model() # модель QTableView-а
index = model.index(1,1)    
print(model.data(index))  # вывести данные из ячейки в второй( если считать с единицы) строке, второго столбца
Узнать к-во строк в таблице model.rowCount(), к-во столбцов model.columntCount()



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Дек. 13, 2017 15:53:46)

Офлайн

#3 Дек. 13, 2017 15:54:46

Kyrym
Зарегистрирован: 2016-12-28
Сообщения: 225
Репутация: +  3  -
Профиль   Отправить e-mail  

PyQt 4 | QTableView + фильтры

А у модели и представления (самой таблицы) индексы данных будут совпадать? Изменяя сортировку представления, индексы модели разве меняются?
—————–
И ещё вопрос. Допустим у меня в таблице столько строк, что в окне не помещаются, приходится пользоваться скроллом. Через функцию поиска я нашёл индексы нужной мне строки, например row(0,100). Что нужно сделать, чтобы таблица перевела вид на эту строку? Вопрос для QTableView и QTableWidget.

Офлайн

#4 Дек. 14, 2017 09:43:59

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

PyQt 4 | QTableView + фильтры

Kyrym
А у модели и представления (самой таблицы) индексы данных будут совпадать? Изменяя сортировку представления, индексы модели разве меняются?
не совсем понял суть вопроса, какие именно индексы? представление только отбражает модель. Почему у них не должны совпадать индексы?
Kyrym
Что нужно сделать, чтобы таблица перевела вид на эту строку? Вопрос для QTableView и QTableWidget.
Если почитать документацию, например тут http://doc.crossplatform.ru/qt/4.8.x/html-qt/qtableview-members.html то можно узнать что у QTableView ( и у соответвенно у QTableWidget как наследника) есть методы scroll( int, int ), scrollContentsBy( int, int ), scrollDirtyRegion( int, int ), scrollTo( const QModelIndex &, ScrollHint ), scrollToBottom (), scrollToTop (). И в частности scrollTo(index) как раз скролит таблицу пока ячейка c указанным индексом не станет видимой.
Как вы вообще что-то делаете не читая документацию?



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#5 Дек. 14, 2017 10:20:33

Kyrym
Зарегистрирован: 2016-12-28
Сообщения: 225
Репутация: +  3  -
Профиль   Отправить e-mail  

PyQt 4 | QTableView + фильтры

PEHDOM
не совсем понял суть вопроса, какие именно индексы?
С этим я уже разобрался, работает как надо.
PEHDOM
Если почитать документацию
Не обращал внимания, что есть столь полные списки методов. Буду изучать.

Офлайн

#6 Дек. 15, 2017 13:06:35

Kyrym
Зарегистрирован: 2016-12-28
Сообщения: 225
Репутация: +  3  -
Профиль   Отправить e-mail  

PyQt 4 | QTableView + фильтры

В общем scrollTo.
QAbstractItemView::scrollTo ( const QModelIndex & index, ScrollHint hint = EnsureVisible )

Для таблицы self.table = QTableWidget() пытаюсь написать что-то типа (переход на индекс 12):

 def on_sc(self):
    self.table.scrollTo(12, hint=QAbstractItemView.EnsureVisible)
Или так:
 def on_sc(self):
        self.table.scrollTo(self.table.item(12, 1), hint=QAbstractItemView.EnsureVisible)
Но это всё не работает.

Офлайн

#7 Дек. 15, 2017 14:19:34

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

PyQt 4 | QTableView + фильтры

Kyrym
Но это всё не работает.
ну так вам нужно туды передать инстанс класса QModelIndex, а не пару цифирь.
типа model.index(12,1)
hint опционально, можно не передвать



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#8 Дек. 15, 2017 16:18:45

Kyrym
Зарегистрирован: 2016-12-28
Сообщения: 225
Репутация: +  3  -
Профиль   Отправить e-mail  

PyQt 4 | QTableView + фильтры

PEHDOM
типа model.index(12,1)
Так если у меня QTableWidget(), то модели-то нет. А конструкция self.table.item(12, 1) не пашет.

Офлайн

#9 Дек. 15, 2017 16:27:44

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

PyQt 4 | QTableView + фильтры

Kyrym
Так если у меня QTableWidget(), то модели-то нет
с чего вы взяли?
http://doc.crossplatform.ru/qt/4.7.x/qtablewidget-members.html
метод model() возвращает текущую модель.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Дек. 15, 2017 16:31:01)

Офлайн

#10 Дек. 15, 2017 17:14:56

Kyrym
Зарегистрирован: 2016-12-28
Сообщения: 225
Репутация: +  3  -
Профиль   Отправить e-mail  

PyQt 4 | QTableView + фильтры

Вот так сработало, да:

 self.table.scrollTo(self.table.model().index(12,1), 3)
Тройка в конце - это hint.
А вообще QModelIndex для QTableWidget() решается через indexFromItem, на сколько я понял.
Из справки:
QModelIndex QTableWidget::indexFromItem ( QTableWidgetItem * item ) const
Возвращает QModelIndex, связанный с данным элементом.
Т.е. типа:
 self.table.scrollTo(self.table.indexFromItem(const QStandardItem * item), 3)
Рабочий итог:
 self.table.scrollTo(self.table.indexFromItem(self.table.item(12,1)), 3)
Хотя первый вариант короче.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version