【问题标题】:In Python 3.8, How can I load a list of images from JsonStore files?在 Python 3.8 中,如何从 JsonStore 文件中加载图像列表?
【发布时间】:2021-04-06 21:15:53
【问题描述】:

请问如何从 json 文件中相应地在 MDCard 中加载图像列表? 我的 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()

【问题讨论】:

    标签: python json kivy kivymd


    【解决方案1】:

    我假设您可以轻松地从 python 获取图像链接,但问题在于将它们添加到 .kv 文件中。所以,你可以做的是给你想要添加卡片的布局一个id

    Screen:
    BoxLayout:
        orientation: 'vertical'
    
        Toolbar:
            title: "Testing"
    
        Scroll:
            TLayout:
                TLayout2:
                    id: layout_2
    

    (我在示例中假设 layout_2)然后您可以使用 python 添加异步图像和 MDCard。

    这是一个例子:

    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)
    

    【讨论】:

    • 你必须提供 size_hint = (None, None), size = ("..", "..")
    • 还有一个问题想问,如果我用for循环创建20个MDCard,如何让这20个MDCard on_release切换不同的屏幕?
    • 是的,你可以。您可以定义不同的 on_release 函数。在 python 中,你必须使用 lambda 来定义函数。所以你可以像 on_release: lambda x: do_this() 那样做,如果你向 do_this() 提供任何参数,它与循环一起变化(比如 i)你必须在 lambda 中使用另一个变量 y 像这样:for i in something : .... lambda x, y=i: do_this(y)
    • 嗨,请问如何创建一个函数来从 json 文件中加载图像列表?问题几乎相同,但就像使用函数来加载 kv 文件的图像列表而不是 add_widget
    • 我不太明白你的问题。你的意思是你想只使用 kv 文件并从那里加载图像而不使用 python 代码?如果是这样,那么您可以添加,但您必须在您的 kv 文件中制作不同的小部件。据我所知,在 kivy 中没有像循环这样的东西,所以你必须为每个小部件制作不同的小部件,它只会让你的代码冗长。如果您只想制作一个小部件并使用函数或任何参数使用不同的图像源,那么是的,您也可以这样做,但它将取代前一个。我希望这会有所帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多