Я довольно новичок в python, но я новичок в Kivy.Я нахожу документацию вокруг Киви трудной для интерпретации, по крайней мере, для меня.До сих пор я был в состоянии создать RecycleView, где я могу добавлять, удалять и изменять данные.В идеале я хочу иметь столько столбцов, сколько хочу, но все данные в каждой строке принадлежат друг другу.Следовательно, если я выберу один, я хочу выделить все элементы в этом ряду.Я пытался с тумблером, но безуспешно.Я просто не знаю, как получить доступ к каждой отдельной кнопке переключения в RecycleView с помощью идентификаторов или каким-либо другим способом.Если бы я мог получить доступ к каждой кнопке по отдельности, я мог бы просто изменить ее состояние на «Вниз».До сих пор мне удавалось только найти, какую строку выбрал пользователь (но не так элегантно).Я справился с этим, рассчитав количество кнопок в строке и сравнив их с индексом выбранной кнопки.
Вот пример, в котором я экспериментирую, обычно я предпочитаю использовать файл .kv:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.recycleview import RecycleView
from kivy.uix.togglebutton import ToggleButton
from kivy.uix.recycleview.views import RecycleDataViewBehavior
class MyButton(RecycleDataViewBehavior, ToggleButton):
index = None
def refresh_view_attrs(self, rv, index, data):
""" Catch and handle the view changes """
self.index = index
return super(MyButton, self).refresh_view_attrs(
rv, index, data)
class TestRecycleView(RecycleView):
items_per_row = 3
selected_data = None
selected_row = None
def find_row(self, instance):
self.selected_row = instance.index // self.items_per_row + 1
print('Row: ', self.selected_row)
self.selected_data = self.data[(self.selected_row - 1) * self.items_per_row: self.items_per_row
* self.selected_row]
print('Data: ', self.selected_data)
KV = '''
<MyButton>:
on_release:
app.root.find_row(self)
TestRecycleView:
data: [{'text': str(x)} for x in range(21)]
viewclass: 'MyButton'
id: rv_controller
target_id: None
RecycleGridLayout:
cols: 3
default_size_hint: 1, None
orientation: 'vertical'
key_selection: 'selectable'
default_size: None, dp(26)
size_hint_y: None
height: self.minimum_height
multiselect: True
touch_multiselect: True
'''
class Test(App):
def build(self):
root = Builder.load_string(KV)
# root.data = items
return root
Test().run()
Поскольку я смог рассчитать, какая строка была выбрана пользователем, я также могу рассчитать, какие данные в RecycleView выбираются.Тем не менее, я хотел бы получить аккуратное визуальное представление для этого вида выбора строки.
Буду очень признателен за некоторую помощь.