首页 > 解决方案 > Python:获取动态TextInput的ID

问题描述

我正在使用python-2.7kivy。我运行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。有人可以告诉我如何获取idtextInput 吗?
如果我能得到id,那么我可以忽略value2空白值。
在此处输入图像描述

测试.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()

测试.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()

标签: python-2.7kivy

解决方案


来自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 ...


推荐阅读