#python #json #kivy #kivymd
#python #json #киви #kivymd
Вопрос:
Могу ли я спросить, как я могу соответствующим образом загрузить список изображений в MDCard из файла json? В моем json-файле есть как минимум 20 ссылок на изображения внутри.
.py
def load_image(self):
store = JsonStore('image.json')
image = store['PRD'].get('td01')
return image
def build(self):
store = JsonStore('image.json')
return Builder.load_file('main1.kv')
.kv
Screen:
BoxLayout:
orientation: 'vertical'
Toolbar:
title: "Testing"
Scroll:
TLayout:
TLayout2:
Card:
AsyncImage:
source: app.load_image()
Card:
AsyncImage:
source: app.load_image()
Card:
AsyncImage:
source: app.load_image()
Ответ №1:
Я предполагаю, что вы можете легко получить ссылку на изображения из python, но проблема заключается в добавлении их в файл .kv. Итак, что вы можете сделать, это указать id
макет, в который вы хотите добавить карточку
Screen:
BoxLayout:
orientation: 'vertical'
Toolbar:
title: "Testing"
Scroll:
TLayout:
TLayout2:
id: layout_2
(Я предположил layout_2 в примере) затем вы можете добавить асинхронное изображение и MDCard с помощью python.
Вот пример:
card = MDCard(orientation='vertical', pos_hint={"center_x":0.5, "center_y":0.65}, size_hint=(0.5,0.5))
img = AsyncImage(source='link_of_image', pos_hint={"center_x":0.5, "center_y":0.5}, allow_stretch=True)
card.add_widget(img)
self.root.ids.layout_2.add_widget(card)
Комментарии:
1. Я. Вы должны указать size_hint = (None, None), размер = («..», «..»)
2. Еще один вопрос, который я хочу задать: если я использую цикл for для создания 20 MDCard, как я могу заставить эти 20 MDCard on_release переключаться на другой экран?
3. Да, вы можете. вы можете определить другую функцию on_release . В python вы должны использовать lambda для определения функции. Итак, вы можете сделать что-то вроде on_release: lambda x: do_this(), и если вы предоставляете какой-либо параметр do_this(), который связывается с циклом (например, i), вам нужно использовать другую переменную y в lambda, например: для i в чем-то: …. лямбда x, y =я: do_this(y)
4. Привет, могу я спросить, как создать функцию для загрузки списка изображений из файла json? Вопрос почти тот же, но похож на использование функции для списка загрузки изображения для файла kv вместо
add_widget
5. Я не совсем понял ваш вопрос. Вы имеете в виду, что хотите использовать только файл kv и загружать изображения оттуда без использования кода python? Если это так, то вы можете добавить, но вам нужно создать разные виджеты в вашем kv-файле. Насколько я знаю, внутри kivy нет такой вещи, как цикл, поэтому вам придется создавать разные виджеты для каждого из них, и это просто сделает ваш код длинным. И если вы хотите создать только один виджет и использовать разные источники изображений, используя функцию или любой параметр, то да, вы тоже можете это сделать, но он заменит предыдущий. Я надеюсь, что это поможет