有人可以告诉我如何在required
上设置textInput
验证
点击Ok
按钮时?
此时点击Ok
按钮,然后我会检查每个TextInput
if self.name.text.strip() == "":
但是如果我的表单有超过50
个字段,那么代码会非常冗长吗?有人可以告诉我另一个简短的方法来设置required
上的TextInput
验证。
from kivy.uix.screenmanager import Screen
from kivy.app import App
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.properties import ObjectProperty
from kivy.uix.textinput import TextInput
Window.size = (500, 330)
class FloatInput(TextInput):
def __init__(self, **kwargs):
super(FloatInput, self).__init__(**kwargs)
def on_text(self, instance, text):
if text !="":
print(text)
class TestScreen(Screen):
name = ObjectProperty(None)
clas = ObjectProperty(None)
def check_validation(self):
if self.name.text.strip() == "":
print("Name is blank")
elif self.clas.text.strip() == "":
print("clas is blank")
class Test(App):
def build(self):
self.root = Builder.load_file('test.kv')
return self.root
if __name__ == '__main__':
Test().run()
#:kivy 1.10.0
TestScreen:
name:name
clas:clas
GridLayout:
cols: 2
padding : 30,30
spacing: 10, 10
row_default_height: '40dp'
Label:
text: 'Name'
FloatInput:
id: name
Label:
text: 'Class'
FloatInput:
id: clas
Button:
text: 'Ok'
on_release: root.check_validation()
Button:
text: 'Cancel'
答案 0 :(得分:1)
详情请参阅以下示例。
from kivy.app import App
from kivy.core.window import Window
from kivy.uix.screenmanager import Screen
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.metrics import dp
from kivy.properties import ObjectProperty, DictProperty
Window.size = (500, 330)
class FloatInput(TextInput):
def on_text(self, instance, text):
if text != "":
print("id={0}, text={1}".format(instance.id, text))
class TestScreen(Screen):
container = ObjectProperty(None)
def __init__(self, **kwargs):
super(TestScreen, self).__init__(**kwargs)
self.container.bind(minimum_height=self.container.setter('height'))
self.create_form()
def create_form(self):
# create 50 labels and text inputs
for i in range(50):
label = Label(text="Label {}".format(i), size_hint_y=None, height=dp(40))
text_input = FloatInput(id=str(i), hint_text="TextInput {}".format(i), size_hint_y=None, height=dp(40))
self.container.add_widget(label)
self.container.add_widget(text_input)
def check_validation(self):
for child in reversed(self.container.children):
if isinstance(child, Label):
label_text = child.text
if isinstance(child, FloatInput):
if child.text.strip() == "":
print("{0} - TextInput is blank, obj={1}".format(label_text, child))
class Test(App):
def build(self):
return TestScreen()
if __name__ == '__main__':
Test().run()
#:kivy 1.10.0
<TestScreen>:
container: container
BoxLayout:
orientation: 'vertical'
BoxLayout:
orientation: 'vertical'
ScrollView:
GridLayout:
id: container
cols: 2
size_hint_y: None
padding : 30,30
spacing: 10, 10
BoxLayout:
size_hint_y: 0.2
Button:
text: 'Ok'
on_release: root.check_validation()
Button:
text: 'Cancel'