Изменение текста кнопок, созданных RecycleView в Kivy - PullRequest
0 голосов
/ 09 мая 2020

У меня не очень большой опыт работы с Kivy, и я пытался прочитать документацию, но все время застреваю.

У меня есть список [«1», «2», «3», «4», «5»], который я хотел бы использовать для создания кнопок и их отображения с помощью RecycleView. По причинам эстетики c я не хочу показывать эти значения, а хотел бы вместо этого просто отображать «Один», «Два», «Три», «Четыре», «Пять» на кнопках. Однако мне бы потребовалось, чтобы [«1», «2», «3», «4», «5»] по-прежнему использовались, поскольку я хотел бы, чтобы значения ссылались на позже, когда я нажимаю на созданные кнопки.

Я попытался добавить текст: «One» в класс ListResultsButton, чтобы поиграть с синтаксисом, но каким-то образом он все еще показывает значения в списке.

Я был бы признателен, если бы кто-нибудь мог помочь мне с методом отображения альтернативного текста на сгенерированных кнопках, и даже лучше, если бы я мог отображать текст из второго списка на кнопках при создании кнопки из первого списка.

Я включил диаграмму, чтобы лучше визуализировать мою проблему. Диаграмма, показывающая проблему

Python код и код kv:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty

test_list = ["1", "2", "3", "4", "5"]

class Test2Root(BoxLayout):

    show_list_input = ObjectProperty()

    def show_list(self):
        #update data in recycleview
        self.show_list_input.data = [{'text': str(x)} for x in test_list]

class Test2App(App):
    pass

if __name__ == "__main__":
    Test2App().run()
#kv code
Test2Root:

<Test2Root>:
    show_list_input: show_list_input_ID
    orientation: "vertical"

    Button:
        text: "Press Me"
        on_press: root.show_list()

    RecycleView:
        id: show_list_input_ID
        viewclass: 'ListResultsButton'
        data: []

        RecycleBoxLayout:
            orientation: 'vertical'
            default_size: None, dp(25)
            default_size_hint: 1, None
            size_hint_y: None
            height: self.minimum_height

<ListResultsButton@Button>
    text: "One"

Буду очень признателен за любую помощь. Спасибо!

1 Ответ

0 голосов
/ 09 мая 2020

У меня нет опыта общения с Киви. Но, глядя на код, я считаю, что сработает следующее:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty

test_list = ["1", "2", "3", "4", "5"]
# Add text in an array
btns_text = ["One", "Two", "Three", "Four", "Five"]

class Test2Root(BoxLayout):

    show_list_input = ObjectProperty()

    def show_list(self):
        #update data in recycleview
        # Change it like this
        self.show_list_input.data = [{'text': btns_text[x]} for x in range(len(test_list))]

class Test2App(App):
    pass

if __name__ == "__main__":
    Test2App().run()
...