pyQt pushButton 在循环内连接创建
pyQt pushButton connect creation within loop
我是pyqt的新手(maya中的pyside),请对我好:)
所以重点是我想通过循环语句生成许多按钮,类似于下面的内容:
(window 中的 5 个按钮 - 完整代码 - maya)
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 成功给出唯一的增量值,我不明白为什么..
这是 lambda
中函数的老问题 - 当您声明函数但单击按钮时,它不会从 x
中获取值。但是,当您单击按钮时,for-loop
结束并且 x
保留最后一个值 - 这样所有按钮都使用相同的值。你必须使用
lambda a=x: self.notifyMe(a)
我是pyqt的新手(maya中的pyside),请对我好:)
所以重点是我想通过循环语句生成许多按钮,类似于下面的内容:
(window 中的 5 个按钮 - 完整代码 - maya)
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 成功给出唯一的增量值,我不明白为什么..
这是 lambda
中函数的老问题 - 当您声明函数但单击按钮时,它不会从 x
中获取值。但是,当您单击按钮时,for-loop
结束并且 x
保留最后一个值 - 这样所有按钮都使用相同的值。你必须使用
lambda a=x: self.notifyMe(a)