2013-05-26 52 views
3

我有一个函数:如何将一个参数传递给信号中的函数?

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,我想通过)。 我不想使用全局变量 - 我该如何解决我的问题?

回答

4

有两种方法(我使用self.on_button作为一个例子功能)

事情是这样的:

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

和:

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

我认为第二个更具可读性。 – kirelagin

+0

但是我应该在哪里添加这一行? –

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

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

相关问题