<p>我正在用kivy创建一个应用程序。所以我认为我对FloatInput的on-focus行为理解不正确。在</p>
<p>让我先描述一下我在这里要做的事情。当用户点击TextInput时,我试图激活一个弹出的numpad(这个numpad只有数字0-9的按钮和一个“enter”按钮)。接下来,一旦用户在弹出的numpad中提供了一个数字并点击了“enter”按钮,弹出窗口应该关闭,TextInput的文本字段应该更新为用户输入的数字。在</p>
<p>但是,我遇到了一个问题。本质上,我有一个表单,上面描述了多个TextInputs(我在后面将它们称为“FloatInputs”b/c,这就是我命名它们的原因)。第一次在FloatInputs中输入值时,一切都按预期工作。但每当我试图在第二个FloatInput中输入一个数字时,问题就会出现。具体来说,on_focus函数会以某种方式调用两次,因此用户必须在弹出窗口中输入两次值(这显然不理想,因为这会使用户感到沮丧)。在</p>
<p>如果这是一个愚蠢的问题,我很抱歉,但我已经困惑了好一阵子了。我认为问题的核心在于TextInput和弹出窗口小部件的关注顺序,但我可能错了。如果有人能提供我如何修复这个错误的建议,我将不胜感激。在</p>
<p>下面是相关的python代码:</p>
<pre><code>class FloatInput(TextInput):
def on_focus(self, instance, value):
print 'ON FOCUS CALLED - THIS SHOULD ONLY BE CALLED ONCE!'
# Adding this helped part of the problem (however, on_focus is still being called twice???)
self.unfocus_on_touch = False
prompt_content = BoxLayout(orientation='vertical') # Main layout
num_pad = NumPadWidget()
prompt_content.add_widget(num_pad)
def my_callback(instance):
self.text = num_pad.ids.num_label.text
self.popup.dismiss()
# Now define the popup, with the content being the layout:
self.popup = Popup(id='num_pad_popup', title='Enter value', content=prompt_content, size_hint=(0.8,0.5), autodismiss=False)
num_pad.ids.enter_btn.bind(on_press=my_callback)
# Open the pop-up:
self.popup.open()
</code></pre>
<p>以下是相关的kv代码:</p>
^{pr2}$