2016-08-15 31 views
1

我使用for循環像這樣創建的QAction對象列表中單擊所觸發的功能參數:傳遞的QAction對象,調用triggered.connect()在後,我上的QAction

class some_class: 
    self.tabs = [] 

    for self.i in range(0,10): 
    self.tabs[self.i] = QtGui.QAction("New", self) 
    self.tabs[self.i].triggered.connect(self.some_function) 

    def some_function(self): 
    print self.i 

每當我點擊任何創建的選項卡,它只會觸發選項卡[9]並僅打印「9」。

那麼如何傳遞的QAction對象本身在由此引發some_function()

回答

2

緩存的some_function指數作爲默認參數:

for index in range(0, 10): 
    action = QtGui.QAction("New", self) 
    action.triggered.connect(
     lambda checked, index=index: self.some_function(index)) 
    self.tabs.append(action) 

... 

def some_function(self, index): 
    action = self.tabs[index] 
    print(action.text()) 
+0

action.triggered.connect( 拉姆達*指定參數時,指數= index:self.some_function(index)) 產生語法錯誤 –

+0

@SahilGupta。這對我來說可以。沒有任何錯誤。你一定已經改變了我的代碼。什麼是語法錯誤? – ekhumoro

+0

它適用於action.triggered.connect(lambda:self.some_function(index))&也有(lambda * args:self.some_function(index)),但會產生語法錯誤\t action.triggered.connect(lambda * args ,index = index:self.some_function(index))。感謝您講述使用lambda函數。 –