【问题标题】:Kivy Unable to connect on_enter callback in kv languageKivy 无法连接 kv 语言的 on_enter 回调
【发布时间】:2012-10-27 14:51:05
【问题描述】:

我最近开始学习 Kivy 并使用它。今天我遇到了一个问题,我不确定这是 Kivy 的错误还是我的误解。这是一个简化版。

我正在开发一个顶部有用于搜索的文本输入的 GUI。我的 Kv 文件如下所示:

#:kivy 1.0
#:import kivy kivy

<SearchPanel>:
    searchquery: searchquery

    AnchorLayout:
        orientation: 'vertical'
        anchor_x: 'center'
        anchor_y: 'top'
        padding: 10

        TextInput:
            id: searchquery
            text: 'What to search for'
            size_hint_x: 0.98
            size_hint_y: None
            height: 30
            on_enter: root.search()

应用程序代码如下所示:

# -*- coding: utf-8 -*-
import kivy
kivy.require('1.4.1')

from kivy.app import App
from kivy.uix.anchorlayout import AnchorLayout


class SearchPanel(AnchorLayout):
    def search(self):
        pass


class ExampleApp(App):
    def build(self):
        return SearchPanel()


if __name__ == '__main__':
    ExampleApp().run()

问题是当我运行应用程序时,我得到了这个回溯:

Traceback (most recent call last):
  File "example.py", line 24, in <module>
    ExampleApp().run()
  File "/home/testing/.virtualenvs/kivy2/local/lib/python2.7/site-packages/Kivy-1.4.1-py2.7-linux-x86_64.egg/kivy/app.py", line 523, in run
    root = self.build()
  File "example.py", line 20, in build
    return SearchPanel()
  File "/home/testing/.virtualenvs/kivy2/local/lib/python2.7/site-packages/Kivy-1.4.1-py2.7-linux-x86_64.egg/kivy/uix/anchorlayout.py", line 62, in __init__
    super(AnchorLayout, self).__init__(**kwargs)
  File "/home/testing/.virtualenvs/kivy2/local/lib/python2.7/site-packages/Kivy-1.4.1-py2.7-linux-x86_64.egg/kivy/uix/layout.py", line 60, in __init__
    super(Layout, self).__init__(**kwargs)
  File "/home/testing/.virtualenvs/kivy2/local/lib/python2.7/site-packages/Kivy-1.4.1-py2.7-linux-x86_64.egg/kivy/uix/widget.py", line 113, in __init__
    Builder.apply(self)
  File "/home/testing/.virtualenvs/kivy2/local/lib/python2.7/site-packages/Kivy-1.4.1-py2.7-linux-x86_64.egg/kivy/lang.py", line 1217, in apply
    self._apply_rule(widget, rule, rule)
  File "/home/testing/.virtualenvs/kivy2/local/lib/python2.7/site-packages/Kivy-1.4.1-py2.7-linux-x86_64.egg/kivy/lang.py", line 1346, in _apply_rule
    crule, idmap)})
  File "_event.pyx", line 184, in kivy._event.EventDispatcher.bind (/tmp/easy_install-PMy51_/Kivy-1.4.1/kivy/_event.c:2038)
KeyError: 'enter'

显然我无法将on_enter 回调插入根布局,我做错了什么?如果我将on_enter 更改为on_text,它会起作用。

【问题讨论】:

    标签: python kivy


    【解决方案1】:

    好的,我发现on_enter 不是TextInput 事件。

    相反,您需要使用 on_text_validate,它仅适用于单行文本输入。或者,如果您愿意,可以将小部件的 on_text_validate 绑定到 on_enter 函数或方法。

    【讨论】:

    • 为了后代,here are the docs 解释了这一点。此外,请确保设置 multiline: False 来触发此操作(在上述文档中进行了解释)。
    猜你喜欢
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多