#kivy #kivy-language #kivymd
#kivy #kivy-язык #kivymd
Вопрос:
https://kivymd.readthedocs.io/en/latest/components/image-list/#smarttilewithstar
Как вы обобщаете пример списка изображений kiymd doc, чтобы логика отображения изображения находилась за пределами файла 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()
Ответ №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()
Комментарии:
1. Это работает. Кстати, первое изображение (00.jpg ) отображает пустое, но не является пустым изображением. 9-е изображение (34.jpg ) появляется в 4-м ряду вместо 3-го, что означает, что откуда-то появляется первое пустое изображение.
2. Удаление строки «MyTile:» устраняет пустое изображение.
Ответ №2:
Вы можете сделать это, добавив функцию..
row_default_height: 500
# Telegram : @DIBIBl , @TDTDI ,@ruks3
# by ruks ,muntazir
# YouTube : https://youtube.com/channel/UCUNbzQRjfAXGCKI1LY72DTA
# Instagram : https://instagram.com/_v_go?utm_medium=copy_link
# github : https://github.com/muntazir-halim
# ---------------------
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
padding: 30, 30
size_hint_y: None
height: self.minimum_height
adaptive_height: True
row_default_height: 500
cols: 3
adaptive_height: True
padding: dp(4), dp(4)
spacing: dp(4)
''')
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()