現在、私のコードは次のようになっています。
for control in self.controls():
self.connect(control, SIGNAL('clicked()'), lambda: self.button(control.objectName()))
コードを実行すると、lambda
関数が要素のリストの最後のcontrol
要素になります。これは予期しないことです。
奇妙なことに、すべてのループを手動で実行すると、lambda
ループごとに正常に動作しますが、最終的には以前と同じ問題が残ります。
for control in self.controls():
func = lambda: self.button(control.objectName())
func() # Prints the correct output
self.connect(control, SIGNAL('clicked()'), func) # When triggered, still breaks
私のself.button()
関数は自明に定義されています:
def button(self, name):
print name
andの出力を出力してcontrol
、func
すべてのループの一意性をチェックしたところ、それらはすべて一意の番号を返しました。それとは別に、正しいオブジェクト名です。id(control)
id(func)
control.objectName()
lambda
通常、コードで sをあまり使用しないため、これは可変スコープの問題であると感じています。露骨な間違いを見た人はいますか?