PyQt:使用带参数的函数连接小部件

时间:2017-01-05 13:33:36

标签: python pyqt4

所以,我发现它可以使用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_())

1 个答案:

答案 0 :(得分:0)

from functools import partial
self.btns[i].pressed.connect(partial(self.example, i))
python中的

lambdas是闭包,所以它将采用循环中的最后一个