代码之家  ›  专栏  ›  技术社区  ›  linjunhalida

在从列表创建小部件的for循环中使用PyQt connect方法时出现错误[重复]

  •  1
  • linjunhalida  · 技术社区  · 17 年前

    它们都返回最后一个按钮的名称。

    我想知道为什么会发生这种事。有人能帮忙吗?

    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 回复  |  直到 17 年前
        1
  •  3
  •   Community Mohan Dere    9 年前

    替换:

     lambda :logging.debug(name)
    

    通过:

     lambda name=name: logging.debug(name)
    

    Why results of map() and list comprehension are different? 了解详情。