Как передать аргумент функции в сигнале?

У меня есть функция:

def pausing(ses):
   if ses.is_paused() == True:
      ses.start()
   else:
      ses.pause()

который приостанавливает загрузку торрента или возобновляет его (зависит от фактического состояния торрента). Я хочу подключить эту функцию с помощью кнопки, например так:

QtCore.QObject.connect(self.pausebutton, QtCore.SIGNAL(_fromUtf8("clicked()")), pause)

Но я не знаю, как передать аргумент ses в этот слот (это другой класс, чем ses, который я хочу передать). Я не хочу использовать глобальные переменные - как я могу решить мою проблему?

2 ответа

Решение

Есть два метода (я использую self.on_button в качестве примера функции)

Что-то вроде этого:

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

А также:

button1.clicked.connect(lambda: self.on_button(1))

Я искал много сайтов, и я нашел пример здесь:

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

Этот пример с сайта Эли Бендерского

Надеюсь, это поможет всем, кто в этом нуждается.

Другие вопросы по тегам