Python: добавить проверку в форме - PullRequest
0 голосов
/ 03 мая 2018

Может кто-нибудь сказать мне, как установить required проверка на textInput
когда нажимаете кнопку Ok?
В это время нажмите кнопку Ok, затем я проверяю каждый TextInput таким образом.
if self.name.text.strip() == "":
Но если в моей форме больше чем 50 полей, то это будет очень длинный код? Может кто-нибудь подскажет другой короткий способ установить required проверку на TextInput.

test.py

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()

test.kv

#: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'

1 Ответ

0 голосов
/ 03 мая 2018
  1. Создание ScrollView из GridLayout
  2. Используйте цикл для создания каждой строки формы, состоящей из Label и TextInput widgets
  3. Использование цикла для доступа к дочернему виджету в self.container.children .

Для получения подробной информации см. Пример ниже.

Пример * * тысяча двадцать-одна main.py 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() test.kv #: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' выход

Img01 - OK button clicked

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...