Python: считать динамический ряд - PullRequest
0 голосов
/ 10 мая 2018

Я использую python-2.7 и kivy 1.10.0.Я добавляю динамическую строку с помощью кнопки +Add More.Я использую on_text событие в каждом динамическом TextInput.Может ли кто-нибудь помочь мне, как посчитать dynamic row on_text событие?На этом изображении вы можете видеть 2 rows. Когда я набираю любой TextInput, а затем on_text вызов события. На этот раз как подсчитать общее количество строк?

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

Window.size = (450, 525)


class display(Screen):

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


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):
        #self.root = Builder.load_string(KV)
        return self.root


test().run()

test.kv

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

    Button:
        text: root.button_text
        size_hint_x: .2

    TextInput:
        size_hint_x: .8
        on_text: root.count_row()


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"


        Rows:
            id: rows

1 Ответ

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

Если вы хотите, чтобы элемент уведомлял другой, вы должны использовать свойства, в вашем случае NumericProperty, и создать связь между ними.

...
class Row(BoxLayout):
    button_text = StringProperty("")
    row_count = NumericProperty(0)
    def count_row(self):
        print('count row', self.row_count)

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

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

    def add_row(self):
        self.row_count += 1
        row = Row(button_text=str(self.row_count))
        self.add_widget(row)
        row.row_count = self.row_count
        self.bind(row_count= row.setter("row_count"))
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...