リストからウィジェットを作成するループのために使用した場合のPyQtはメソッドのバグを接続します

StackOverflow https://stackoverflow.com/questions/736651

  •  09-09-2019
  •  | 
  •  

質問

私は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
役に立ちましたか?

解決

私はあなたのコード内で少なくとも一つのバグを参照してください。

に置き換えます:

 lambda :logging.debug(name)

でます:

 lambda name=name: logging.debug(name)

を参照してくださいなぜ、マップの結果()とリストの内包されています詳細については、別のですかます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top