2016-11-20 69 views
0

內創作我是新來的PyQt(pyside在Maya),請對我很好:)PyQt的按鈕連接環

所以關鍵是我想通過生成循環語句許多按鈕,東西simmilar象下面這樣:

(5按鈕在窗口 - 完整代碼 - 假象)

import PySide.QtCore as qc 
import PySide.QtGui as qg 
class simpleUI(qg.QDialog): 
    def __init__(self): 
     qg.QDialog.__init__(self) 
     self.setWindowTitle('Simple UI') 
     self.btn=[] 
     for x in range(5) : 
      self.btn.append(x) 
      self.btn[x]= qg.QPushButton(self) 
      self.btn[x].setText('this is btn number{0}'.format(x)) 
      self.btn[x].setGeometry(qc.QRect(0,100+(x*20), 100,20)) 
      self.btn[x].clicked.connect(lambda : self.notifyMe(x)) 
    def notifyMe(self,index): 
     print index 
dialog = simpleUI() 
dialog.show() 

你看,我存儲在數組按鈕對象,但問題是,當我想BTN信號與notifyMe功能連接,每個按鈕總是給X相同的值(X = 4),同時在button.setText X成功給唯一的遞增的價值,我想不出它爲什麼..

回答

2

這是老問題,在lambda功能 - 當您聲明函數,但是當您單擊按鈕時,它不會從x獲得值。但是當你點擊按鈕時,for-loop結束,x保持最後的值 - 這樣所有的按鈕都使用相同的值。你必須使用

lambda a=x: self.notifyMe(a) 
+0

謝謝furas,你解釋完美! –