擅长:python、mysql、java
<p>问题是您正在使用<code>lambda</code>创建一个函数,其中函数内的某些变量没有作为参数传递给函数。当lambda函数被执行时,当发出信号时,它使用那些变量的值(比如<code>instance</code>)在那个时刻。要清楚地说,您生成的每个lambda函数都在运行时使用<code>instance</code>的值,而不是定义时间。因此<code>instance</code>只保存对循环最后一次迭代中使用的对象的引用,这解释了您所看到的行为。在</p>
<p>一些有用的信息可以在这里找到(也可以阅读评论)<a href="http://eli.thegreenplace.net/2011/04/25/passing-extra-arguments-to-pyqt-slot/" rel="nofollow">http://eli.thegreenplace.net/2011/04/25/passing-extra-arguments-to-pyqt-slot/</a></p>
<p>根据以上链接的评论:</p>
<blockquote>
<p>What you can do is have another function generate the lambda, i.e.
something like:</p>
<pre><code>def make_callback(param):
return lambda: self.on_button(param)
</code></pre>
<p>And in the connection, call <code>make_callback(i)</code>. Then a different lambda is
created for each iteration.</p>
</blockquote>
<p>因此,您需要对此进行概括,并将<code>instance</code>传递给<code>make_callback</code>函数,然后将<code>lambda</code>定义放入<code>make_callback</code>函数中。我会提供一个明确的例子,但正如另一个答案所说,你的格式在你的问题中似乎变得非常混乱,我可能会弄错你的具体应用。如果你没有按照我说的去做,把你问题中的代码弄清楚,我就去做一个例子!在</p>