Как вывести текст кнопки из списка 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_())
