how to use clicked.connect() with a signalmapper in python3.7 and PyQt5

30 Views Asked by At

I want to call a method when a button is pressed using clicked.connect() . Method should simply output text inside the clicked button.

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)      

This method should call when a button is clicked.

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

Here is my main method.

if __name__ == '__main__':

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

What's wrong? How do I have to use this signalmapper?

0

There are 0 best solutions below