Требуется добавить кнопку в последней колонке каждой строки
Работаю в 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 шт):
Если вы хотите получать быстрые и правильные ответы, предоставляйте пожалуйста минимально-воспроизводимый пример, который демонстрирует проблему.
Как создать минимальный, самодостаточный и воспроизводимый пример смотрите по ссылке указанной в комментарии выше.
Учитывая что это ваш первый вопрос и с надеждой что вы все правильно поймете, я вам покажу как задуманное вами может выглядеть.
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_())

