Действие кнопки привязывается к последней строки БД PYQT

У меня есть БД заметок и в PyQt я хочу реализовать отображение всех заголовков в виде кнопок, к которым привязываю метод для открытия нового окна с полным содержимым заметки(заголовок, текст).

В сам метод нужно передать заголовок заметки. Делаю я это через цикл (выбираю все заголовки, создаю кнопку и добавляю ее в массив из кнопок).

Но получается так, что все кнопки привязываются к заголовку последней строки БД. Текст на кнопках разный, но в функцию по нажатию кнопки передается последняя строка.

a - это массив из нужных мне заголовков

layout = QGridLayout()
b = []
for f in a:
    text = QPushButton(f)
    b.append(text)
    text.clicked.connect(lambda: open_other_window(text.text()))
    layout.addWidget(text)

    self.setLayout(layout)
def open_other_window(text: str):
    global OtherWindow
    OtherWindow = QtWidgets.QDialog()
    OtherWindow.setWindowTitle(text)
    title = QLabel(text)
    title.setText(text)
    OtherWindow.show()

Так вот вопрос, как привязывать к кнопке функцию и передавать туда индивидуальное значение в цикле?


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

Автор решения: Alexander Chernin

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

text.clicked.connect(lambda btn=text: open_other_window(btn.text()))
→ Ссылка