リストからウィジェットを作成するループのために使用した場合のPyQtはメソッドのバグを接続します
質問
私は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)
所属していません StackOverflow