TextInput
님이 제한된 문자열 값 (즉, 최대 길이 x의 문자열)을 수신 할 수있는 방법이 있습니까? 나는 을 모방하기 위해 AliasProperty
을 mixin하는 방법을 조사했지만 Property 클래스 메쏘드를 찾을 수 없다.Kivy : TextInputs에 "BoundedString"속성을 사용할 수 있습니까?
답변
시간은 on_text
라고 부르며 텍스트는 이미 textinput에서 변경됩니다. insert_text을 재정 의하여 TextInput에 삽입하기 전에 텍스트를 잡아서 text 속성이 업데이트되기 전에 TextInput에 항목을 제한해야합니다.
textinput이 당신을 위해 키보드를 바인드/요청하지 마십시오. Textinput에 초점을 맞추고 (TextInput이 키보드를 요구하고 단일 키보드 환경에서 핸들러가 작동을 멈춘 후에) 핸들러가 작동을 멈 춥니 다.
다음은 텍스트 입력을 숫자 입력으로 제한하기 위해 insert_text를 대체하는 샘플 코드입니다.
class NumericInput(TextInput):
def insert_text(self, substring, from_undo=False):
if not from_undo:
try:
int(substring)
except ValueError:
return
super(NumericInput, self).insert_text(substring, from_undo)
그래서 일정한 길이로 텍스트를 제한하려면 다음을 수행 할 수 있습니다 : 위의 코드를 사용하여 간단한 문제가 있습니다
class CustomInput(TextInput):
max_chars = NumericProperty(10)
def insert_text(self, substring, from_undo=False):
if not from_undo and (len(self.text)+len(substring) > self.max_chars):
return
super(CustomInput, self).insert_text(substring, from_undo)
바퀴를 재발 명하려고하지 마세요. 감사! –
텍스트를 수정할 때마다 on_text
이벤트가 발생한다고 생각합니다. 그래서 당신은 방법을 재정의 할 수
def on_text(self, instance, value):
print('The widget', instance, 'have:', value)
# validate here!!!
# you might also want to call the parent.
#super(ClassName, self).on_text(instance, value)
을 또는 바인딩 :
def my_callback(instance, value):
print('The widget', instance, 'have:', value)
#validate here
textinput = TextInput()
textinput.bind(text=my_callback)
는 부정사 재귀에주의하십시오. on_text
또는 my_callback
안에있는 텍스트 변수를 수정하면 이벤트가 시작될 수 있습니다. 솔직히 기억이 안나요하지만 난 그게 않는 생각, 그래서 당신은 같은 변수
또한 여전히 확인할 on_focus
을 사용할 수 있습니다를 수정하기 전에 확인하는 등의 플래그를 필요로 할 때 TextInput
포커스를 잃었 :
def on_focus(instance, value):
if value:
print('User focused', instance)
else:
print('User defocused', instance)
textinput = TextInput()
textinput.bind(focus=on_focus)
마지막으로 bind the keyboard 수 있으므로 TextInput
전에 액세스가 보장됩니다. 솔직히 명령의 실행 순서를 알지 못하지만, on_text
을 사용하면 화면에 나타나는 글자를 삭제하는 것이 바람직하지 않을 수 있습니다.
내 생각에 당신은 BoundedStringProperty
을 구현하는 것이 당신이 원하는 것을 성취 할 수있을 것이라고 생각합니다. 여기에 또한 BoundedNumericProperty
의 코드, 당신은 당신이 이미 이전에 언급 한 on_text
이벤트를 트리거 StringProperty
을 얻었다 년부터 AliasProperty
를 사용하려고 시도해서는 안된다.
. 길이 비교에서 코드를 사용하려면 NumericProperty.defaultvalue를 사용해야합니다. 아래는 간단한 것으로 판단되는 모든 크기의 클래스를 만드는 데 사용할 수있는 하위 클래스입니다.
class CustomInput(TextInput):
def __init__(self , **kwargs):
if "max_chars" in kwargs:
self.max_chars = NumericProperty(int(kwargs["max_chars"]))
super(CustomInput , self).__init__(**kwargs)
def insert_text(self , substring , from_undo = False):
if not from_undo and (len(self.text) + len(substring) > self.max_chars.defaultvalue):
return
super(CustomInput , self).insert_text(substring , from_undo)
i는 init에 키워드 인수로 max_chars를 전달합니다. NumericProperty 대신 max_chars에 대해 int를 그냥 사용하는 경우
- 1. Kivy 코드를 사용할 수 없습니다.
- 2. non-kivy python 스크립트에 buildozer를 사용할 수 있습니까?
- 3. build.py를 사용할 때 Kivy 패키지
- 4. Pyscripter에서 Kivy 프로그램을 실행할 수 있습니까?
- 5. Kivy
- 6. Kivy
- 7. kivy
- 8. 어떻게 kivy 언어로 레이아웃 배경을 사용할 수 있습니다
- 9. Kivy - 확인 나는이 kivy 파일있어
- 10. kivy-client 크래시 로그를 어떻게 내 서버에 보낼 수 있습니까?
- 11. kivy 라벨에 많은 심판이있는 경우 어떻게 심문을받을 수 있습니까?
- 12. kivy GridLayout에서 특정 위젯의 특정 격자를 지정할 수 있습니까?
- 13. Kivy : 두 화면을 어떻게 하나로 결합 할 수 있습니까?
- 14. Kivy : 파이썬
- 15. kivy 창
- 16. kivy 안드로이드 공유 이미지
- 17. Kivy BoxLayout.orientation
- 18. 타이머를 사용할 수 있습니까?
- 19. alcheMo를 사용할 수 있습니까?
- 20. jquery를 사용할 수 있습니까?
- 21. 어떻게 사용할 수 있습니까?
- 22. 을 사용할 수 있습니까?
- 23. TestContext.Properties를 사용할 수 있습니까?
- 24. pushState를 사용할 수 있습니까?
- 25. 을 사용할 수 있습니까?
- 26. FluidMoveBehavior를 사용할 수 있습니까?
- 27. JDialog를 사용할 수 있습니까?
- 28. UIMoviePlayerController ... 사용할 수 있습니까?
- 29. killProcess를 사용할 수 있습니까?
- 30. glReadPixels를 사용할 수 있습니까?
Y는 'insert_text'를 무시하고 TextInput에 입력 된 텍스트를이 방식으로 제한하지 않습니까? –