Найти - Пользователи
Полная версия: PyQt4. QStandardItemModel. Как получить значение ячейки в текущей строке по имени столбца?
Начало » GUI » PyQt4. QStandardItemModel. Как получить значение ячейки в текущей строке по имени столбца?
1
Pluto
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
На кой эта модель вообще нужна, если к полям нельзя обратиться по имени столбца?
Pluto
Послал в баню эту модель и засунул свои данные в словарь словарей.

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

Но, всё-таки, хотелось бы знать: есть ли вообще возможность получить данные из строки модели по имени заголовка???
py.user.next
Полный код пришли.
Pluto
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())
py.user.next
#!/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]$
Pluto
А можно ещё сделать словарь из имён заголовков и индексов ихних, типа:
[code python]
n = 0
for i in table.headerData: #или как там их откопать ещё можно? Щаз питона нет под рукой.
headerdict[i]=n
n+=1

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

Короче, через попу всё. Свой класс писать надо на основе QStandardItemModel, который будет сам следить за словарём заголовков.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB