Требуется добавить кнопку в последней колонке каждой строки

Работаю в Qt Designer. Есть tableWidget со списком.

Необходимо в последней ячейке каждой строки добавить разные кнопки, которые присваивали бы любой переменной значения из колонки ID.

Пока что удалось добавить всего лишь одну кнопку в одну строку.

Пример функции, где я загружаю информацию из базы данных в tableWidget и добавляю одну кнопку в конце строки:

   def loadproc(self):
       data=sqlite3.connect("proc.db")
       cursor=data.cursor()
       cmd=''' SELECT * from Proc '''
       result=cursor.execute(cmd)
       self.tableWidget.setRowCount(0)


       for row_number, row_data in enumerate(result):
            self.tableWidget.insertRow(row_number)

       for column_number, data in enumerate(row_data):
            self.tableWidget.setItem(row_number, column_number, QTableWidgetItem(str(data)))

       btn = Qt.QPushButton("Some button")
       self.tableWidget.setCellWidget(0, 7, btn)

введите сюда описание изображения


Ответы (1 шт):

Автор решения: S. Nick

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

Как создать минимальный, самодостаточный и воспроизводимый пример смотрите по ссылке указанной в комментарии выше.

Учитывая что это ваш первый вопрос и с надеждой что вы все правильно поймете, я вам покажу как задуманное вами может выглядеть.

import sys
import sqlite3
from PyQt5.QtWidgets import QWidget, QApplication, QTableWidget, \
    QTableWidgetItem, QVBoxLayout, QPushButton, QHeaderView


class Example(QWidget):
    def __init__(self, data):
        super().__init__()
        
        self.layout = QVBoxLayout(self)
        self.tableWidget = QTableWidget()
        self.layout.addWidget(self.tableWidget) 

        self.id = None
        rows = len(data)
        columns = len(data[0])
        self.tableWidget.setRowCount(rows)
        self.tableWidget.setColumnCount(columns+1)
        col_headers = ['A', 'B', 'C', 'D', 'E', 'F', 'G',]
        self.tableWidget.setHorizontalHeaderLabels(col_headers)
        self.tableWidget.setAlternatingRowColors(True)
        self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

        for i, row in enumerate(data):
            for j, column  in enumerate(row):
                item = QTableWidgetItem(f"{column}")
                self.tableWidget.setItem(i, j, item)
                
            btn = QPushButton("Показать ID строки")
            btn.clicked.connect(lambda ch, i=i: self.onClicked(i))
            self.tableWidget.setCellWidget(i, j+1, btn)

    def onClicked(self, row):
        item = self.tableWidget.item(row, 0) 
        self.id = item.text()
        print(f'строка = {row}, ID = {self.id}')


conn = sqlite3.connect('dataTest.db')        # тут ваша БД
cur = conn.cursor()
cur.execute(f"SELECT * FROM tovar")          # ене таблица БД
data = cur.fetchall()
conn.close()
#print(* data, sep='\n') 


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Example(data)
    w.resize(850, 300)
    w.show()
    sys.exit(app.exec_())
    

введите сюда описание изображения

→ Ссылка