在for循环中使用PyQt连接方法时创建小部件的错误
我有一个图形界面程序,
它会根据一个名字列表自动创建按钮,
并且每个按钮都连接到一个函数,这个函数会打印出按钮的名字。
但是当我运行这个程序,按下所有按钮时,
它们都返回了最后一个按钮的名字。
我想知道为什么会这样。有没有人能帮我解决这个问题?
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import logging
logging.basicConfig(level=logging.DEBUG,)
class MainWindow(QWidget):
def init(self):
names = ('a','b','c')
lo = QHBoxLayout(self)
for name in names:
button = QPushButton(name,self)
lo.addWidget(button)
self.connect(button,SIGNAL("clicked()"),
lambda :logging.debug(name))
if __name__=="__main__":
app = QApplication(sys.argv)
m = MainWindow();m.init();m.show()
app.exec_()
结果是这样的:
python t.py
DEBUG:root:c
DEBUG:root:c
DEBUG:root:c
1 个回答
3
我在你的代码里发现了至少一个错误。
把下面这段:
lambda :logging.debug(name)
换成:
lambda name=name: logging.debug(name)
想了解更多细节,可以查看这个链接:为什么map()和列表推导式的结果不同?