PyQt5 QGridLayout Как сделать каждую кнопку отдельным объектом

import ftplib
import sys
import easygui

from PyQt5.QtWidgets import QWidget, QGridLayout, QPushButton, QApplication, QGraphicsOpacityEffect

# msg = "Введите информацию о сервере"
# fieldNames = ["IP Сервера", "Логин", "Пароль"]
# title = 'FTP' 
# ftp_log = easygui.multpasswordbox(msg, title, fieldNames)
ftp = ftplib.FTP('192.168.0.1', 'Artem','1204')
ftp.cwd('/disk1_1/gf')
class App(QWidget):
    def __init__(self):
        super().__init__()
        self.grid = QGridLayout()
        self.file_lst = ftp.nlst()
        self.len_file_lst = len(ftp.nlst())
        self.ftp_lst()

    def ftp_lst(self):
        self.setLayout(self.grid)
        positions = [(i,j) for i in range(self.len_file_lst) for j in range(1)]
        for position, name in zip(positions, self.file_lst):
            if name == '':
                continue
            self.button = QPushButton(name)
            self.button.clicked.connect(self.on_click)
            self.grid.addWidget(self.button, *position)


        self.show()

    def on_click(self):
        ftp.cwd(f'/disk1_1/')
        a = self.button
        print(a.text())


if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

Надо чтобы в консоль выводился текст из каждой нажатой кнопки, а не только из последней


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

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

Держи. Метод QObject.sender() нужен для получения объекта отправителя сигнала:

def on_click(self):
    ftp.cwd(f'/disk1_1/')
    a = self.sender()
    # тут надо бы проверять, что наш объект имеет метод text()
    print(a.text())
→ Ссылка