2013-05-26 51 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

我希望它會幫助任何需要它的人。

相關問題