Я пытаюсь создать собственный виджет как модуль. Мой пользовательский виджет включает TextInput и некоторые другие вещи внутри виджета FloatLayout.
Когда я импортирую свой пользовательский виджет, я хочу использовать событие on_text_validate для TextInput внутри Floatlayout.
Как вы знаете, мы можем добавить поведение кнопки к любому виджету через класс ButtonBehavior, но я не смог найти способ добавить событие on_text_validate в мой пользовательский виджет.
Это мой модуль с именем mymodule.py внутри папки моего проекта.
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.lang import Builder
#from kivy.uix.behaviors import FocusBehavior
Builder.load_string("""
<SearchBar>:
id: search_bar
size_hint: 1,.1
pos_hint: {'top':1}
canvas:
Color:
rgba: 1,1,1,1
Rectangle:
pos: self.pos
size: self.size
TextInput:
id: input
hint_text: 'search'
size_hint: .82,None
height: dp(33)
pos_hint: {'center_x':.565,'center_y': .5}
multiline: False
padding_y: [self.height / 2.0 - (self.line_height / 2.0) * len(self._lines), 0]
padding_x: 20,150
""")
class SearchBar(FloatLayout):
pass
Я называю это из main.py как
#:import SearchBar mymodule.SearchBar
И это мой main.py
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.floatlayout import FloatLayout
Builder.load_string("""
#:import SearchBar mymodule.SearchBar
<MyTest>:
SearchBar:
id: search
size_hint: 1,.1
# on_text_validate: root.do_something()
""")
class MyTest(FloatLayout):
def do_something(self,*args):
print('done')
class Test(App):
def build(self):
return MyTest()
Test().run()