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

Рейтинг: 0Ответов: 1Опубликовано: 16.04.2023

У меня есть БД заметок и в 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()

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

Ответы

▲ 0

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

text.clicked.connect(lambda btn=text: open_other_window(btn.text()))