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

Я использую python-2.7 и kivy. я запускаю test.py, затем экран выглядит как прикрепленное изображение. Когда я нажимаю кнопку ok, я пытаюсь получить id из TextInput, используя этот код.

for row in reversed(rows.children):
    for ch in reversed(row.children):
        if isinstance(ch, TextInput):
            print(ch.id)
            if ch.text == "" and ch.id=='test1':
                print("TextInput is required")
                ch.focus = True
                break;


Но print(ch.id) показывает None. Может кто-нибудь сказать мне, как получить id textInput?
Если я могу получить id, тогда я могу игнорировать value2 для пустого значения.
enter image description here

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.uix.boxlayout import BoxLayout
from kivy.properties import StringProperty
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button

Window.size = (450, 525)


class display(Screen):

    def add_more(self):
        self.ids.rows.add_row()

    def insert(self):

        values = []
        rows = self.ids.rows

        for row in reversed(rows.children):
            for ch in reversed(row.children):
                if isinstance(ch, TextInput):
                    print(ch.id)
                    if ch.text == "" and ch.id=='test1':
                        print("TextInput is required")
                        ch.focus = True
                        break;

class Row(BoxLayout):
    button_text = StringProperty("")

    def count_row(self):
        print('count row')


class Rows(BoxLayout):
    orientation = "vertical"
    row_count = 0

    def __init__(self, **kwargs):
        super(Rows, self).__init__(**kwargs)
        self.add_row()

    def add_row(self):
        self.row_count += 1
        self.add_widget(Row(button_text=str(self.row_count)))


class test(App):

    def build(self):
        return self.root

test().run()

test.kv

<Row>:
    test1 : test1
    test2 : test2
    orientation: "horizontal"
    spacing: 0, 5

    Button:
        text: root.button_text
        size_hint_x: .2

    TextInput:
        id : test1
        size_hint_x: .4

    TextInput:
        id : test2
        size_hint_x: .4
display:

    BoxLayout:
        orientation: "vertical"
        padding : 20, 20

        BoxLayout:
            orientation: "horizontal"

            Button:
                size_hint_x: .2
                text: "+Add More"
                valign: 'bottom'
                on_press: root.add_more()


        BoxLayout:
            orientation: "horizontal"

            Label:
                size_hint_x: .2
                text: "SN"
                valign: 'bottom'

            Label:
                size_hint_x: .4
                text: "Value1"
                valign: 'bottom'
            Label:
                size_hint_x: .4
                text: "Value2"
                valign: 'bottom'

        Rows:
            id: rows


        BoxLayout:
            orientation: "horizontal"
            padding : 10, 0
            spacing: 10, 10
            size_hint: .5, .7
            pos_hint: {'x': .25, 'y':.25}

            Button:
                text: 'Ok'
                on_release:
                    root.insert()

            Button:
                text: 'Cancel'
                on_release: root.dismiss()

1 Ответ

0 голосов
/ 11 мая 2018

из https://kivy.org/docs/api-kivy.uix.widget.html:

id Added in 1.0.0
Unique identifier of the widget in the tree.

id is a StringProperty and defaults to None.

Вы можете назначить id самостоятельно, хотя ...

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