Last active
September 8, 2021 21:13
-
-
Save CoutinhoElias/08509bf6d3872fc185727ef23dbf31f9 to your computer and use it in GitHub Desktop.
Criando seu primeiro RecycleView com Kivy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Precisei criar um widget semelhante aos do KivyMD | |
# a forma mais simples é copiando do próprio kivyMD | |
# E como farei isso? | |
# fui em https://kivymd.readthedocs.io/en/latest/components/list/#twolineavatarlistitem | |
# e copiei o conteúdo abaixo: | |
''' | |
TwoLineAvatarListItem: | |
text: "Two-line item with avatar" | |
secondary_text: "Secondary text here" | |
ImageLeftWidget: | |
source: "data/logo/kivy-icon-256.png" | |
''' | |
# No arquivo main.py fiz o import da classe TwoLineAvatarListItem | |
from kivymd.uix.list import TwoLineAvatarListItem | |
# E da proriedade StringProperty | |
from kivy.properties import StringProperty | |
#Criei uma classe própria que herda de TwoLineAvatarListItem: | |
class ImagemComDuasLinhas(TwoLineAvatarListItem): | |
source = StringProperty() | |
# Na classe da Screen modifiquei somente o conteúdo dentro fo 'for' | |
class ScreenListItens(Screen): | |
def on_kv_post(self, base_widget): | |
p = Detalhe.select(Detalhe.dsdetalhe, Detalhe.cdprincipal) \ | |
.order_by(Detalhe.cdprincipal) | |
sample_images = [ | |
'coragem_de_saco_cheio.png', | |
'coragem_feliz.png', | |
'coragem_teu.png', | |
'menu.png', | |
'python.png' | |
] | |
for row in p.dicts(): | |
# Para funcionar você deve ter imagens com esses mesmos nomes ou edite essa lista. | |
self.ids.rv.data.append( | |
{ | |
#"viewclass": "ItemImage", | |
"source": './images/{}'.format(choice(sample_images)), #"ImageLeftWidget": choice(sample_images), | |
"text": row['cdprincipal'], | |
"secondary_text":row['dsdetalhe'], | |
"callback": lambda x: x, | |
} | |
) | |
# Na linha 32 acima criei uma lista de nomes de imagens, fiz apenas para | |
# simular imagens diferentes e tornar a aplicação mais atraente. | |
# Claro que essas imagens devem vir do banco de dados ou da núvem mas como | |
# não temos em nenhum deles eu simulei. | |
# Na linha 42 acima começo a adicionar Widgets à lista exatamente no id rv. | |
# Da linha 45-47 acima começo a enviar as informações que desejo mostrar | |
# na minha lista. | |
''' D E T A L H A N D O''' | |
# Linha 45: passo o caminha e concateno com uma imagem aleatória | |
# em sample_images. | |
# Linha 46: Informo qualquer texto, escolhi código principal do produto. | |
# Linha 47: Informo qualquer texto, escolhi a descrição do produto. | |
# Na linha 48 chamo uma função qualquer para quando o usuário clique no | |
# objeto. | |
'''A R Q U I V O .KV''' | |
# Abaixo criei o modelo da classe ImagemComDuasLinhas que definimos acima | |
# na linha 21: | |
''' | |
<ImagemComDuasLinhas>: | |
text: "DUAS LINHAS COM AVATAR" | |
secondary_text: "SEGUNDA LINHA AQUI" | |
ImageLeftWidget: | |
source: root.source | |
''' | |
# Abaixo temos a nossa Screen | |
''' | |
<ScreenListItens>: | |
name: "list_itens" | |
FloatLayout: | |
orientation: 'vertical' | |
RecycleView: | |
id: rv | |
viewclass: 'ImagemComDuasLinhas' | |
key_size: 'height' | |
pos_hint: {'center_x': 0.5, 'center_y': 0.39} | |
RecycleBoxLayout: | |
padding: dp(10) | |
# Tamanho do retangulo com a imagem e os textos | |
default_size: None, dp(70) | |
default_size_hint: 1, None | |
size_hint_y: None | |
height: self.minimum_height | |
orientation: 'vertical' | |
''' | |
# Na linha 86 defini o bloco como FloatLayout para que eu tenha | |
# mais liberdade na posição do widget. | |
# Na linha 89 temos o nosso RecycleView que será usado com | |
# as informações que enviamos a partir da linha 42. | |
# Na linha 90 definimos o ID do RecycleView usado na linha 42. | |
# Na linha 91 instanciamos a classe ImagemComDuasLinhas que criamos | |
# na linha 21. | |
# Nas linhas 92-93 me refiro a posicionamento e tamanho do RecycleView. | |
# Na linha 94 criamos um RecycleBoxLayout que faz parte do RecycleView. | |
# Nas linhas 95-101 são apenas mais formatações do widget. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment