Я новичок в python, но совсем новичок в Kivy. Я считаю, что документацию вокруг Kivy трудно интерпретировать, по крайней мере, для меня. До сих пор мне удалось создать RecycleView, где я могу добавлять, удалять и изменять данные. В идеале я хочу иметь столько столбцов, сколько захочу, но все данные в каждой строке принадлежат друг другу. Следовательно, если я выберу один, я хочу выделить все элементы в этой строке. Я пробовал с togglebutton, но безуспешно. Я просто не знаю, как я могу получить доступ к каждому отдельному переключателю в RecycleView через идентификаторы или какой-либо другой метод. Если бы я мог получить доступ к каждому переключателю по отдельности, я мог бы просто изменить его состояние, чтобы оно было равно «Down». До сих пор мне удалось только найти, какую строку выбрал пользователь (хотя и не так элегантно). Мне удалось это, подсчитав количество кнопок в строке и сравнив его с индексом выбранной кнопки.
Вот пример, где я экспериментирую, обычно я предпочитаю использовать файл .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 выбираются. Тем не менее, я хотел бы аккуратное визуальное представление для такого выбора строк.
Был бы очень признателен за помощь.