pyqt4 connect arguments - указываем параметры (аргументы) вызова функции при подключении сигнала к слоту

во-первых вот такой пример:

from PyQt4.QtCore import *
from PyQt4.QtGui import *

class MyForm(QMainWindow):
    def __init__(self, parent=None):
        super(MyForm, self).__init__(parent)
        button1 = QPushButton('Button 1')
        button2 = QPushButton('Button 1')
        button1.clicked.connect(lambda: self.on_button(1))
        button2.clicked.connect(lambda: self.on_button(2))

        layout = QHBoxLayout()
        layout.addWidget(button1)
        layout.addWidget(button2)

        main_frame = QWidget()
        main_frame.setLayout(layout)

        self.setCentralWidget(main_frame)

    def on_button(self, n):
        print('Button {0} clicked'.format(n))

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    form = MyForm()
    form.show()
    app.exec_()

альтернативой использования lambda может служить:

button1.clicked.connect(partial(self.on_button, 1))
button2.clicked.connect(partial(self.on_button, 2))

Два предыдущих клёвых примера взяты отсюда

далее мои примечания -

использование лямбды - не всегда удобно, так например если передавать в качестве аргумента переменную изменяющующся в цикле -то использовано будет всегда только последнее значение, приведу пример:

import functools # необходимо чтобы использовать partial

        i = 1 # счётчик цикла
        while i < 15: # прописываем условие
            text = "Сообщение " + str(i);
            button = QPushButton(text) # (конкатенация) добавляем номер сообщения
            #button.clicked.connect(lambda: self.show_message(text)) # не катит (i окажется = 15 для всех кнопок)
            button.clicked.connect(functools.partial(self.show_message, text)) # c i работает корректно
            messages.append(button)
            i = i + 1

кстати, функция show_message может быть определена (в последнем куске кода она находится в том же классе, что и приведённый код) так = http://fkn.ktu10.com/?q=node/4341