Как передать аргумент функции в сигнале?
У меня есть функция:
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_()
Этот пример с сайта Эли Бендерского
Надеюсь, это поможет всем, кто в этом нуждается.