как использовать clicked.connect() с картографом сигналов в python3.7 и PyQt5

Я хочу вызвать метод при нажатии кнопки с помощью clicked.connect() . Метод должен просто выводить текст внутри нажатой кнопки.

import sys
from PyQt5.QtCore import QSize, QSignalMapper 
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QGridLayout, QWidget

class MainWindow(QMainWindow):    
    def __init__(self):

        QMainWindow.__init__(self)

        self.setMinimumSize(QSize(300, 200))    

        grid = QGridLayout()
        buttons = []
        positions = [(i,j) for i in range(10) for j in range(5)]
        print('\npostions: ', positions)

        for i in range(200):
            buttons.append('Button '+str(i)) 

        signalMapper = QSignalMapper(self)
        i = 0

        for position, buttons in zip(positions, buttons):            
            print('\npostion, buttons: ', position, buttons)
            button = QPushButton(buttons, self)
            signalMapper.setMapping(button, buttons)
            button.clicked.connect(signalMapper.map)
            grid.addWidget(button, *position)

        signalMapper.mapped.connect(self.getResults)
        print('\nsignalMapper.map:', signalMapper.map)

        widget = QWidget()
        widget.setLayout(grid)
        self.setCentralWidget(widget)      

Этот метод должен вызываться при нажатии кнопки.

def getResults(self, button):
    signals = MainWindow.button.text()
    print('\nsignals:\n', signals)

Вот мой основной метод.

if __name__ == '__main__':

    app = QApplication(sys.argv)
    app.setStyle('Fusion')
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec_())

Что случилось? Как мне использовать этот signalmapper?


person sticki    schedule 18.03.2020    source источник
comment
в строке for position, buttons in zip(positions, buttons): вы используете buttons как неупакованную версию списка buttons. Начните с исправления этого.   -  person David Culbreth    schedule 18.03.2020
comment
Рекомендую избегать неуместных фраз.   -  person eyllanesc    schedule 18.03.2020
comment
1) Обратите внимание на то, что я указываю вам на DavidCulbreth, поскольку это может вызвать проблемы, но в этом случае, к счастью, у вас их нет. 2) Если вы сопоставляете текст, то отображаемый сигнал должен отправлять текст, а не кнопку, поэтому вы должны изменить на signalMapper.mapped[str].connect(self.getResults) и def getResults(self, button): signals = MainWindow.button.text() print('\nsignals:\n', signals) на def getResults(self, signals): print('\nsignals:\n', signals)   -  person eyllanesc    schedule 18.03.2020
comment
@eyllanesc большое спасибо. Сейчас все в порядке.   -  person sticki    schedule 19.03.2020