1

私はGUIプログラムを持っています、

名前リストからボタンを自動作成し、関数に接続するとその名前が出力されます。

このプログラムを実行するときは すべてのボタンを押します

それらはすべて、最後のボタンの名前を返します。

なぜこのようなことが起こるのだろうか。誰でも助けることができますか?

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
4

1 に答える 1

3

あなたのコードに少なくとも 1 つのバグがあります。

交換:

 lambda :logging.debug(name)

に:

 lambda name=name: logging.debug(name)

map() とリスト内包表記の結果が異なるのはなぜですか? を参照してください。詳細については。

于 2009-04-10T04:51:10.867 に答える