Как вывести текст кнопки из списка PyQT5

Как определить функции для отдельных кнопок?
Скажите, как исправить ошибку, что при нажатии на кнопку (которая уже в нижнем списке) выводится в консоль именно последняя добавленная кнопка (её текст).
А должен по идеи выводить текст той кнопки, на которую и нажали.

from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QFrame, QPushButton
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow


class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        self.count_of_buttons = 1

        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget)

        self.setGeometry(700, 200, 500, 400)

        self.button_hello = QPushButton('Hello')
        self.button_hello.clicked.connect(self.add_button)

        self.layout_buttons = QVBoxLayout()
        self.layout_buttons.addStretch()  # Это добавит пружину, прижимающую виджеты вверх

        self.frame = QFrame()
        self.frame.setMinimumSize(200, 200)
        self.frame.setFrameStyle(QFrame.Box)
        self.frame.setLayout(self.layout_buttons)

        main_layout = QVBoxLayout(self.centralWidget)
        main_layout.addWidget(self.button_hello)
        main_layout.addWidget(self.frame)


    def add_button(self):
        self.button = QPushButton(f"Кнопка № {self.count_of_buttons}")
        self.button.clicked.connect(self.pressed_btn)
        self.count_of_buttons += 1
        self.layout_buttons.insertWidget(0, self.button)  # Добавление в начало, с пружиной это прижмет вверх



    def pressed_btn(self):
        print(f"кнопка нажата: {self.button.text()}") # выводится постоянно последняя добавленная кнопка




if __name__ == '__main__':
    app = QApplication(sys.argv)
    form = Example()
    form.show()
    sys.exit(app.exec())

Может можно как-то обращаться к кнопке по типу:

print(QPushButton().text())

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

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

Попробуйте так:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QFrame, \
    QPushButton, QMainWindow


class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        self.count_of_buttons = 1

        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget)

        self.setGeometry(700, 200, 500, 400)

        self.button_hello = QPushButton('Hello')
        self.button_hello.clicked.connect(self.add_button)

        self.layout_buttons = QVBoxLayout()
        self.layout_buttons.addStretch()  # Это добавит пружину, прижимающую виджеты вверх

        self.frame = QFrame()
        self.frame.setMinimumSize(200, 200)
        self.frame.setFrameStyle(QFrame.Box)
        self.frame.setLayout(self.layout_buttons)

        main_layout = QVBoxLayout(self.centralWidget)
        main_layout.addWidget(self.button_hello)
        main_layout.addWidget(self.frame)

    def add_button(self):
        self.button = QPushButton(f"Кнопка № {self.count_of_buttons}")
        
        self.button.clicked.connect(lambda ch, btn=self.button: self.pressed_btn(btn))  # + lambda
        
        self.count_of_buttons += 1
        self.layout_buttons.insertWidget(0, self.button)  # Добавление в начало, с пружиной это прижмет вверх

    def pressed_btn(self, btn):                                                         # + btn
        print(f"кнопка нажата: {btn.text()}")                                           # + btn 


if __name__ == '__main__':
    app = QApplication(sys.argv)
    form = Example()
    form.show()
    sys.exit(app.exec_())

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

→ Ссылка