所以,我发现它可以使用python的lambda
来完成,但问题是,如果我在lambda
中放置一个变量,它将采用它的最后一个值,我不想要即将发生。那么,这可能与for循环有关,还是我需要手动完成?
简短的代码示例如下:
import os,sys,time
from PyQt4 import QtGui, QtCore
class Widget(QtGui.QWidget):
def __init__(self):
super(Widget,self).__init__()
self.setGeometry(50,50,600,300)
self.setWindowTitle("Example")
self.btns=[]
layout=QtGui.QHBoxLayout()
for i in range(5):
self.btns.append(QtGui.QPushButton(str(i),self))
self.btns[i].pressed.connect(lambda: self.example(i))
layout.addWidget(self.btns[i])
self.setLayout(layout)
self.show()
def example(self,i):
print(i)#no matter which button is clicked, it prints 4 in this example
app=QtGui.QApplication(sys.argv)
GUI=Widget()
sys.exit(app.exec_())
答案 0 :(得分:0)
from functools import partial
self.btns[i].pressed.connect(partial(self.example, i))
python中的lambdas是闭包,所以它将采用循环中的最后一个