@roman01

Как из таблицы QTableView получить значение ячейки, зная строку и столбец?

Доброго всем времени суток. Я начал изучать PyQt, но пока продвигается туго, не могу вникнуть в идеологию, вот и появляются проблемы на пустом месте.

Есть простенькая база данных из одной таблички - не принципиально.
Мой код реализует окно, где есть таблица QTableView и 2 кнопки.
При нажатии на кнопку мне нужно получить текст ячейки текущей выбранной строки, НО первого столбца.
5cb2bb9d7a7c3500050526.png

Я смог получить индекс выделенной ячейки (строка, столбец), так же смог получить значение текущей ячейки, но никак не могу получить именно ячейку по строке и столбцу, как это сделать?

Вот код:
нажатие на кнопку - def addTotal(self):
import sys
from PyQt5 import QtCore,QtGui,QtWidgets,QtSql
from framework import options

class EditRating(QtWidgets.QWidget):
    stm = None
    tv = None
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent) # инициализация
        # описание всех объектов в окне
        self.ModelsTable = QtWidgets.QTableView()
        self.ModelsTable.setSelectionMode(1) # может быть выделен только один элемент
        self.addSuccesButton = QtWidgets.QPushButton("Добвить рейтинг модели (РЕЙТИНГ)")
        self.addTotalButton = QtWidgets.QPushButton("Увеличить общий счетчик модели (СЧЕТЧИК)")
        # задать параметры объектов окна
        self.addTotalButton.setMinimumHeight(50)
        self.addSuccesButton.setMinimumHeight(50)
        # создать вертикальный box
        self.vbox = QtWidgets.QVBoxLayout()
        # добавить в вертикальный box виджеты
        self.vbox.addWidget(self.ModelsTable)
        self.vbox.addWidget(self.addSuccesButton)
        self.vbox.addWidget(self.addTotalButton)
        self.setLayout(self.vbox)
        # обработчики событий нажатия на кнопки
        self.addSuccesButton.clicked.connect(self.addSucces)
        self.addTotalButton.clicked.connect(self.addTotal)

    # увеличение рейтинга
    def addSucces(self):
        # получить имя выбранной модели
        pass
        #
        row = self.ModelsTable.currentIndex().row()
        col = self.ModelsTable.currentIndex().column()
        
        # ЗДЕСЬ МНЕ НУЖНО ПОЛУЧИТЬ ТЕКСТ ЯЧЕЙКИ ТЕКУЩЕЙ СТРОКИ И ПЕРВОГО СТОЛБЦА
        print(row,col)

    # увеличение счетчика
    def addTotal(self):
        print("total")

    # загрузка списка моделей в таблицу
    def loadModelsList(self):
        # подключить базу данных
        path_to_priceDB = options.GetOptions("SQLite")
        con = QtSql.QSqlDatabase.addDatabase('QSQLITE')
        con.setDatabaseName(path_to_priceDB)
        con.open()
        # создать модель
        stm = QtSql.QSqlQueryModel(parent=window)
        stm.setQuery('select * FROM MODELS')
        # задать заголовки для столбцов модели
        stm.setHeaderData(1,QtCore.Qt.Horizontal,"Название модели")
        stm.setHeaderData(2, QtCore.Qt.Horizontal, "Описание модели")
        tv = self.ModelsTable
        # задаем для таблицы созданную модель
        tv.setModel(stm)
        # скрыть ненужные столбцы
        tv.hideColumn(0)  # скрыть ID
        tv.hideColumn(3) # скрыть source
        tv.hideColumn(4)  # скрыть символ
        tv.hideColumn(5)  # скрыть таймфрейм
        tv.hideColumn(7)  # скрыть тип модели
        # установить размеры колонок
        tv.setColumnWidth(1,180) # название модели
        tv.setColumnWidth(2, 400)  # описание модели
        # передать данные в класс
        self.stm = stm
        self.tv = tv


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = EditRating()
    window.setWindowTitle("Программа редактирования рейтинга моделей")
    window.resize(1024,600)
    window.loadModelsList() # загрузка списка моделей
    window.show()
    sys.exit(app.exec_())
  • Вопрос задан
  • 2167 просмотров
Пригласить эксперта
Ответы на вопрос 1
kkmspb
@kkmspb
хобби C++, Qt, десктоп, микроконтроллеры STM32
Это делается вызов метода data модели данных, куда передается index с col и row.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
20 апр. 2024, в 14:27
3000 руб./за проект
20 апр. 2024, в 13:56
7000 руб./за проект
20 апр. 2024, в 13:52
7000 руб./за проект