如何将参数传递给信号中的函数?

时间:2013-05-26 20:07:15

标签: python pyqt signals-slots

我有一个功能:

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

暂停下载或恢复它(取决于torrent的实际状态)。 我想用一个按钮连接这个功能,如下所示:

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

但是我不知道如何将一个参数 ses 传递给那个插槽(它与 ses 不同,我希望传递它)。 我不想使用全局变量 - 我该如何解决我的问题?

2 个答案:

答案 0 :(得分:4)

有两种方法(我使用self.on_button作为示例函数)

这样的事情:

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

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

答案 1 :(得分:2)

我搜索了很多网站,我在这里找到了这个例子:

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

此示例来自Eli Bendersky's website

我希望它能帮助任何需要它的人。