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

import sys

from PyQt5.QtWidgets import QApplication, QPushButton, QLineEdit
from PyQt5.QtWidgets import QMainWindow

dic = {'А': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..',
       'E': '.', 'F': '..-.', 'G': '--.', 'H': '....', 'I': '..',
       'J': '.---', 'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.',
       'O': '---', 'P': '.--.', 'Q': '--.-', 'R': '.-.', 'S': '...',
       'T': '-', 'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-',
       'Y': '-.--', 'Z': '--..'}


class FirstForm(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(800, 300, 500, 200)
        self.setWindowTitle('Азбука Морзе 2')
        stroka = 'abcdefghijklmnopqrstuvwxyz'
        a = 30
        x = 10
        y = 20
        for i in range(len(stroka)):
            button = QPushButton(str(stroka[i]), self)
            button.move(x, y)
            button.resize(a, a)
            if i == 14:
                y += 20
                x = 10
                y += 10
            else:
                x += 30
            button.clicked.connect(self.click)
        self.input = QLineEdit(self)
        self.input.move(10, 90)
        self.input.resize(450, 30)

    def click(self, btn):
        #???

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

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

Функция lambda вам в помощь:

button.clicked.connect(lambda ch, btn=button :self.on_click(btn))

import sys
from PyQt5.QtWidgets import QApplication, QPushButton, QLineEdit
from PyQt5.QtWidgets import QMainWindow


dic = {'А': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..',
       'E': '.', 'F': '..-.', 'G': '--.', 'H': '....', 'I': '..',
       'J': '.---', 'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.',
       'O': '---', 'P': '.--.', 'Q': '--.-', 'R': '.-.', 'S': '...',
       'T': '-', 'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-',
       'Y': '-.--', 'Z': '--..'}


class FirstForm(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(800, 300, 500, 200)
        self.setWindowTitle('Азбука Морзе 2')
        stroka = 'abcdefghijklmnopqrstuvwxyz'
        a = 30
        x = 10
        y = 20
        for i in range(len(stroka)):
            button = QPushButton(str(stroka[i]), self)
            button.move(x, y)
            button.resize(a, a)
            if i == 14:
                y += 20
                x = 10
                y += 10
            else:
                x += 30
            button.clicked.connect(lambda ch, btn=button :self.on_click(btn))
            
        self.input = QLineEdit(self)
        self.input.move(10, 90)
        self.input.resize(450, 30)

    def on_click(self, btn):
        print(f'Вы нажали кнопку: {btn.text()}')
        self.input.setText(f'{self.input.text()}{btn.text()}')
        
        
if __name__== "__main__":
    import sys
    app = QApplication(sys.argv)
    Form = FirstForm()
    Form.show()
    sys.exit(app.exec())        

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

→ Ссылка