2016-11-20 67 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,你解释完美! –