Ошибка метода PyQt connect при использовании в цикле for, который создает виджеты из списка
Вопрос
У меня есть программа с графическим интерфейсом,
Он автоматически создает кнопки из списка имен, а подключение к функции выводит ее название.
но когда я запускаю эту программу, я нажимаю все кнопки,
все они возвращают название последней кнопки.
Интересно, почему это происходит.кто-нибудь может помочь?
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
Решение
Я вижу по крайней мере одну ошибку в вашем коде.
Заменить:
lambda :logging.debug(name)
Автор::
lambda name=name: logging.debug(name)
Видишь Почему результаты map() и понимания списка отличаются? для получения подробной информации.
Не связан с StackOverflow