【问题标题】:Generalize the KivyMD image-list example概括 KivyMD 图像列表示例
【发布时间】:2021-02-14 23:28:24
【问题描述】:

https://kivymd.readthedocs.io/en/latest/components/image-list/#smarttilewithstar

您如何概括 kiymd doc image-list 示例,使图像显示逻辑在 kv 文件之外?

这是我的尝试,但它仅在第一行显示所有图像(并且将左侧的第一张图像留空)。谢谢。

from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivymd.uix.imagelist import SmartTile
from kivymd.uix.gridlayout import MDGridLayout

img = ["00.jpg", "03.jpg", "13.jpg", "15.jpg", "24.jpg", "28.jpg", "29.jpg", "33.jpg", "34.jpg"]

Builder.load_string('''

<MyTile@SmartTile>
    size_hint_y: None
    height: "240dp"

<CatScreen>:
    
    ScrollView:
        id: scroll

        MDGridLayout:
            id: grid
            cols: 3
            adaptive_height: True
            padding: dp(4), dp(4)
            spacing: dp(4)

            MyTile:
''')


class CatScreen(Screen):

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
    
    def display_image(self):
        for im in img:
            self.ids.grid.add_widget(SmartTile(source = im))
        return self


class CatApp(MDApp):

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
    
    def build(self):
        self.cs = CatScreen()
        return self.cs.display_image()

CatApp().run()

【问题讨论】:

    标签: kivy kivy-language kivymd


    【解决方案1】:
    import os
    
    from kivy.factory import Factory as F
    from kivy.lang import Builder
    from kivymd.app import MDApp
    from kivy.uix.screenmanager import Screen
    from kivymd.uix.imagelist import SmartTile
    
    ######################################
    # this part of the code is to take images from my folder
    img = []
    PATH = "/root/Pictures" # source folder
    for i in os.listdir(PATH):
        if ".png" in i:
            img.append(PATH + "/" + i)
    ######################################
    
    Builder.load_string('''
    
    <MyTile@SmartTile>:
        size_hint_y: None
        height: "240dp"
    
    <CatScreen>:
        
        ScrollView:
            id: scroll
    
            MDGridLayout:
                id: grid
                cols: 3
                adaptive_height: True
                padding: dp(4), dp(4)
                spacing: dp(4)
    
                MyTile:
    ''')
    
    
    class CatScreen(Screen):
    
        def __init__(self, **kwargs):
            super().__init__(**kwargs)
        
        def display_image(self):
            for im in img:
                self.ids.grid.add_widget(F.MyTile(source=im))
            return self
    
    
    class CatApp(MDApp):
    
        def __init__(self, **kwargs):
            super().__init__(**kwargs)
        
        def build(self):
            self.cs = CatScreen()
            return self.cs.display_image()
    
    CatApp().run()
    

    【讨论】:

    • 它有效。顺便说一句,第一张图像(00.jpg)显示为空白,但不是空白图像。第 9 张图片 (34.jpg) 出现在第 4 行而不是第 3 行,这意味着第一个空白图片是从某个地方出现的。
    • 删除“MyTile:”行会消除空白图像。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 2021-03-23
    • 2022-10-20
    相关资源
    最近更新 更多