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())