@Finx

Как передать значение QPushButton из QTableWidget в функцию?

Доброго времени суток.
Прошу вашей помощи, потому что сам не могу разобраться.

Имеется таблица QTableWidget которая выводит данные из БД.
Через запрос к БД я считаю количество записей и вывожу столько же строк:
self.tableWidget.setRowCount(CountRow)

В конце каждой строки выводится кнопка:
for a1 in range(0, CountRow):
  self.tableWidget.setItem(a1, 0, QTableWidgetItem(Name[a1]))
  self.tableWidget.setItem(a1, 1, QTableWidgetItem(SurName[a1]))
  self.tableWidget.setItem(a1, 2, QTableWidgetItem(Age[a1]))
  self.tableWidget.setCellWidget(a1, 3, self.Btn)


Суть в том, что бы при нажатии на кнопку её ID (или номер) отсылался в функцию.
Я попытался сделать так:
self.Btn.clicked.connect(lambda: self.DownloadProcessDef(a1))


Но, при нажатии на любую кнопку мне передается ID(номер) последней кнопки а не той, что я нажимаю.
Я понимаю, что после прохождения всего цикла, в переменной a1 у меня остается последнее значение. Но не понимаю, как сделать так, что бы при нажатии на кнопку мне в функцию передался тот ID под которым забита кнопка.

Функция выводит просто полученный номер
def DownloadProcessDef(self, ff):
        print(ff)


Спасибо
  • Вопрос задан
  • 370 просмотров
Пригласить эксперта
Ответы на вопрос 2
Assargin
@Assargin
Перед ответом смотрю наличие ✔ в ваших вопросах
Сам qt не знаю, но.
self.tableWidget.setCellWidget(a1, 3, self.Btn)
Смущает меня эта строка.
Если я правильно её понял, вы помещаете в эту ячейку кнопку self.Btn, которая была где-то предварительно создана, перед вашим циклом. То есть, вы в N ячеек размещаете одну и ту же кнопку, вместо того, чтобы создавать кнопку для каждой строки.
self.Btn.clicked.connect(lambda: self.DownloadProcessDef(a1))

Тут вы, скорее всего, назначаете обработчик этой кнопке. И если в qt возможен только один обработчик события, то логично, что срабатывает последний прикреплённый.
Ответ написан
@khrisanfov
Программист
По каждому сигналу в Qt можно узнать отправителя, как делать это в Python точно не знаю, но гугл подсказывает что sender = self.sender(), а дальше делай с этим объектом что хочешь, например получай id так sender.id
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы