擅长:python、mysql、java
<p>详细说明:当你把回调代码放在kv中时,就像在做一个lambda。在</p>
<p>所以这个kv代码:</p>
<pre><code>on_press: popup.dismiss()
</code></pre>
<p>相当于以下Python代码:</p>
^{pr2}$
<p><code>on_press=popup.dismiss</code>工作的唯一原因是<code>Popup.dismiss()</code>吞并了额外的参数(<code>Button</code>实例作为第一个参数传递)。所以在这种情况下,两者似乎是等价的,但通常不是。在</p>
<p>以以下代码为例:</p>
<pre><code>def callback():
pass
button = Button(on_press=callback)
</code></pre>
<p>当按下<code>Button</code>时,它调用<code>callback(self)</code>-这将引发异常,因为<code>callback</code>没有参数。在</p>
<p>相比之下,此代码的工作方式与<code>dismiss</code>的工作方式类似:</p>
<pre><code>def callback(*args, **kwargs):
pass
button = Button(on_press=callback)
</code></pre>
<p>当然,以千伏为单位:</p>
<pre><code>on_press: callback()
</code></pre>
<p>…无论您使用的是哪个<code>callback</code>定义,它都可以工作。在</p>