gpt4 book ai didi

python - 使 TextInput on_text_validate 事件可从另一个小部件访问

转载 作者:太空宇宙 更新时间:2023-11-03 21:37:40 24 4
gpt4 key购买 nike

我正在尝试创建一个自定义小部件作为模块。我的自定义小部件包括 TextInput 和 FloatLayout 小部件内的其他一些内容。

当我导入自定义小部件时,我想在 Floatlayout 中对 TextInput 使用 on_text_validate 事件。

如您所知,我们可以通过 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()

最佳答案

一个可能的解决方案是创建一个同名的事件并使用 TextInput 事件来触发它:

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.lang import Builder

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
on_text_validate: root.dispatch('on_text_validate', *args)
""")

class SearchBar(FloatLayout):
def __init__(self, **kwargs):
super(SearchBar, self).__init__(**kwargs)
self.register_event_type('on_text_validate')

def on_text_validate(self, *args):
pass

关于python - 使 TextInput on_text_validate 事件可从另一个小部件访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53145085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com