Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » PyQt4. QStandardItemModel. Как получить значение ячейки в текущей строке по имени столбца? [RSS Feed]

#1 Июль 22, 2014 11:09:56

Pluto
Зарегистрирован: 2012-05-29
Сообщения: 177
Репутация: +  2  -
Профиль   Отправить e-mail  

PyQt4. QStandardItemModel. Как получить значение ячейки в текущей строке по имени столбца?

mymodel = QtGui.QStandardItemModel()
--
#создаём таблицу, присваиваем заголовки столбцам 
nextHeader=["column1", "column2", "column3"]
for n in range(mymodel.columnCount()):
    mymodel.setHorizontalHeaderItem(n, QtGui.QStandardItem(nextHeader[n]))
--
for row in mymodel:
    print(?????)
---
Что написать в принт, чтобы получить значение ячейки из столбца с заголовком, допустим, column2

Отредактировано Pluto (Июль 22, 2014 11:34:49)

Офлайн

#2 Июль 23, 2014 05:11:22

Pluto
Зарегистрирован: 2012-05-29
Сообщения: 177
Репутация: +  2  -
Профиль   Отправить e-mail  

PyQt4. QStandardItemModel. Как получить значение ячейки в текущей строке по имени столбца?

На кой эта модель вообще нужна, если к полям нельзя обратиться по имени столбца?

Офлайн

#3 Июль 23, 2014 09:01:58

Pluto
Зарегистрирован: 2012-05-29
Сообщения: 177
Репутация: +  2  -
Профиль   Отправить e-mail  

PyQt4. QStandardItemModel. Как получить значение ячейки в текущей строке по имени столбца?

Послал в баню эту модель и засунул свои данные в словарь словарей.

Вот только если мне понадобится отобразить эти данные в виде, то словарь словарей подсунуть ему в качестве модели данных не выйдет.

Но, всё-таки, хотелось бы знать: есть ли вообще возможность получить данные из строки модели по имени заголовка???

Офлайн

#4 Июль 23, 2014 10:51:43

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

PyQt4. QStandardItemModel. Как получить значение ячейки в текущей строке по имени столбца?

Полный код пришли.



Офлайн

#5 Июль 23, 2014 13:07:16

Pluto
Зарегистрирован: 2012-05-29
Сообщения: 177
Репутация: +  2  -
Профиль   Отправить e-mail  

PyQt4. QStandardItemModel. Как получить значение ячейки в текущей строке по имени столбца?

from PyQt4 import QtGui
table = QtGui.QStandardItemModel()
headers = ["col1", "col2", "col3"]
n=0
for header in headers:
    table.insertColumn(n)
    table.setHorizontalHeaderItem(n, QtGui.QStandardItem(header))
    n+=1
table.insertRow(0)
table.insertRow(1)
#Заполняем
for rowN in range(table.rowCount()):
    for colN in range(table.columnCount()):
        iitem = QtGui.QStandardItem("value " + str(rowN)+ " " + str(colN))
        table.setItem(rowN, colN, iitem)
#Читаем
for rowN in range(table.rowCount()):
    for colN in range(table.columnCount()):
        print (rowN, colN, "=", table.item(rowN, colN).text())
#Чего хотим?
#Получить значение из ячейки таблицы по наименованию столбца (header) и номеру строки
#Что-то типа print(table.item(rowN, определитьИндексСтолбцаПоЗаголовку("Col2")).text())

Офлайн

#6 Июль 23, 2014 14:02:54

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

PyQt4. QStandardItemModel. Как получить значение ячейки в текущей строке по имени столбца?

#!/usr/bin/env python3
 
from PyQt4 import QtGui, QtCore
 
table = QtGui.QStandardItemModel()
 
headers = ["col1", "col2", "col3"]
 
n = 0
for header in headers:
    table.insertColumn(n)
    table.setHorizontalHeaderItem(n, QtGui.QStandardItem(header))
    n += 1
 
table.insertRow(0)
table.insertRow(1)
 
#Заполняем
for rowN in range(table.rowCount()):
    for colN in range(table.columnCount()):
        iitem = QtGui.QStandardItem("value " + str(rowN)+ " " + str(colN))
        table.setItem(rowN, colN, iitem)
 
#Читаем
for rowN in range(table.rowCount()):
    for colN in range(table.columnCount()):
        print(rowN, colN, "=", table.item(rowN, colN).text())
 
#Чего хотим?
#Получить значение из ячейки таблицы по наименованию столбца (header) и номеру строки
#Что-то типа print(table.item(rowN, определитьИндексСтолбцаПоЗаголовку("Col2")).text())
 
col = 'Col2'
 
for rowN in range(table.rowCount()):
    for colN in range(table.columnCount()):
        colhdr = table.headerData(colN, QtCore.Qt.Horizontal)
        if colhdr == col.lower():
            print(colhdr, rowN, colN, "=",
                  table.item(rowN, colN).text())

[guest@localhost py]$ ./qtmodel.py 
0 0 = value 0 0
0 1 = value 0 1
0 2 = value 0 2
1 0 = value 1 0
1 1 = value 1 1
1 2 = value 1 2
col2 0 1 = value 0 1
col2 1 1 = value 1 1
[guest@localhost py]$



Офлайн

#7 Июль 23, 2014 20:04:07

Pluto
Зарегистрирован: 2012-05-29
Сообщения: 177
Репутация: +  2  -
Профиль   Отправить e-mail  

PyQt4. QStandardItemModel. Как получить значение ячейки в текущей строке по имени столбца?

А можно ещё сделать словарь из имён заголовков и индексов ихних, типа:

[code python]
n = 0
for i in table.headerData: #или как там их откопать ещё можно? Щаз питона нет под рукой.
headerdict[i]=n
n+=1

table.item(1, headerdict["col2"]).text()
[/code]
Вместе с моделью хранить ещё и словарь с заголовками и их индексами. А если модель изменилась, не забывать, что словарь тоже нужно обновить.

Короче, через попу всё. Свой класс писать надо на основе QStandardItemModel, который будет сам следить за словарём заголовков.

Офлайн

  • Начало
  • » GUI
  • » PyQt4. QStandardItemModel. Как получить значение ячейки в текущей строке по имени столбца?[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version