2012-10-27 2 views
2

최근에 Kivy를 배우고 사용하기 시작했습니다. 오늘 나는 그것이 Kivy의 버그인지 아니면 내 대신의 오해인지 확실하지 않은 문제를 발견했습니다. 이것은 단순화 된 버전입니다.Kivy on_enter 콜백을 kv 언어로 연결할 수 없습니다.

검색을 위해 위에 텍스트 입력이있는 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_enteron_text으로 변경하면 작동합니다.

답변

5

좋아, 나는 on_enterTextInput 이벤트가 아니라는 것을 알아 냈습니다.

대신 모노린 텍스트 입력과 함께 작동하는 on_text_validate을 사용해야합니다. 또는 원하는 경우 위젯의 on_text_validateon_enter 함수 또는 메소드로 바인딩 할 수 있습니다.

+0

후자를 위해, 이것을 설명하는 [다음은 docs] (http://kivy.org/docs/api-kivy.uix.textinput.html#kivy.uix.textinput.TextInput)입니다. 또한,'multiline : False'를 설정하여이를 트리거하십시오 (위의 문서에서 설명). –

관련 문제