pyQt按钮在循环内连接创建

Rif*_*man 0 python qt pyqt maya

我是 pyqt 的新手(Maya 中的 pyside),请对我好一点:)

所以关键是我想通过循环语句生成许多按钮,类似于下面的东西:

(窗口中的 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()
Run Code Online (Sandbox Code Playgroud)

如您所见,我将按钮对象存储在数组中,但问题是当我想将 btn 信号与notifyMe 函数连接时,每个按钮总是给出 x 相同的值 (x=4),同时在button.setText x 成功给出唯一的增量值,我不明白为什么..

fur*_*ras 5

函数输入是一个老问题lambda——x当你声明函数时它没有得到值,但是当你点击按钮时它没有得到值。但是当你点击按钮然后for-loop结束并x保持最后一个值 - 这样所有按钮都使用相同的值。你必须使用

lambda a=x: self.notifyMe(a)
Run Code Online (Sandbox Code Playgroud)