2012-10-27 27 views
2

我最近開始學習Kivy並使用它。今天我遇到了一個問題,我不確定這是基維的一個錯誤還是代表我的誤解。這是一個簡化版本。Kivy無法連接kv語言的on_enter回撥

我正在開發一個GUI,在頂部有一個文本輸入用於搜索。我千伏文件看起來像這樣:

#: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_enteron_text它的作品。

回答

5

好的,我發現on_enter不是TextInput事件。

相反,您需要使用on_text_validate,它只適用於monoline文本輸入。或者,如果你喜歡它,你可以將你的部件的on_text_validate綁定到on_enter函數或方法。

+0

對於後人,[這裏是文檔](http://kivy.org/docs/api-kivy.uix.textinput.html#kivy.uix.textinput.TextInput),解釋這一點。此外,請務必設置'multiline:False'觸發此(在上述文檔中解釋)。 –