R
R
roman012019-04-14 07:52:00
Python
roman01, 2019-04-14 07:52:00

How to get the value of a cell from a QTableView table, knowing the row and column?

Good day to all. I started to study PyQt, but while it is moving slowly, I can’t delve into the ideology, so problems appear out of nowhere.
There is an unpretentious database from one plate - not essentially.
My code implements a window where there is a QTableView and 2 buttons.
On button click, I need to get the text of the cell of the currently selected row, BUT the first column.
5cb2bb9d7a7c3500050526.png
I was able to get the index of the selected cell (row, column), I was also able to get the value of the current cell, but I just can’t get the cell by row and column, how can I do this?
Here is the code:
button click - 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_())

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question