Created
September 19, 2021 20:08
-
-
Save CoutinhoElias/7ac9cd36cec56949d5640a634f0c7c92 to your computer and use it in GitHub Desktop.
search field on KivyMD
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
# Vamos adicionar um campo personalizado ao nosso widget com RecycleView | |
# Logo acima da Screen criei um campo personalizado, ele pode estar em | |
# qualquer lugar do arquivo kv (desde que esteja fora dos widgets | |
# existentes) | |
# Nesse campo eu defino as propriedades comuns como cor, tamanho da fonte | |
# e alinhamento. | |
# https://kivymd.readthedocs.io/en/latest/components/textfield/#mdtextfieldround | |
''' | |
# Campo criado herdando de MDTextFieldRound | |
<CampoArredondado@MDTextFieldRound>: | |
font_size: '25sp' | |
normal_color: app.theme_cls.primary_dark | |
color_active: app.theme_cls.primary_dark | |
halign: 'center' | |
multiline: False | |
''' | |
# Abaixo a nossa Screen irei adicionar mais um Layout e dentro dele o | |
# nosso campo. | |
''' | |
<ScreenListItens>: | |
name: "list_itens" | |
FloatLayout: | |
CampoArredondado: | |
id: pesquisa | |
hint_text: 'Digite o que procura' | |
text_validate_unfocus: False | |
pos_hint: {'center_x': 0.5, 'center_y': 0.83} | |
size_hint: .8, .09 | |
#on_text_validate: root.salvar() | |
FloatLayout: | |
orientation: 'vertical' | |
RecycleView: | |
id: rv | |
viewclass: 'ImagemComDuasLinhas' | |
key_size: 'height' | |
pos_hint: {'center_x': 0.5, 'center_y': 0.27} | |
RecycleBoxLayout: | |
padding: dp(10) | |
# Tamanho do retangulo com a imagem e os textos | |
default_size: None, dp(65) | |
default_size_hint: 1, None | |
size_hint_y: None | |
height: self.minimum_height | |
orientation: 'vertical' | |
''' | |
# Na linha 24 adicionamos mais um FloatLayout específicamente para ter | |
# controle no posicionamento do Widget. | |
# Na linha 25 adicionei nosso widget personalizado de nome CampoArredondado | |
# Nas linhas 26-30 definimos as propriedades particulares do campo. | |
# Na linha 31 podemos adicionar eventos ao validar o texto digitado. | |
''' ARQUIVO PYTHON''' | |
# Com a nossa classe ScreenListItens criada, utilizaremos somente uma consulta ao | |
# banco de dados conforme abaixo: | |
''' | |
p = Detalhe.select(Detalhe.dsdetalhe, Detalhe.cdprincipal) \ | |
.order_by(Detalhe.cdprincipal) | |
''' | |
# Dentro da nossa classe ScreenListItens no arquivo .py adicionaremos | |
# mais uma função set_list_md_icons(): | |
# Poderia ter feito na mesma função on_kv_post mas tornaria menos | |
# compreensível na explicação. | |
def set_list_md_icons(self, text="", search=False): | |
'''Builds a list of icons for the screen MDIcons.''' | |
self.ids.rv.data = [] | |
for row in self.p.dicts(): | |
if search: | |
if (text.upper() in row['dsdetalhe'].upper()) or (text.upper() in row['cdprincipal'].upper()): | |
self.ids.rv.data.append( | |
{ | |
# "viewclass": "ItemImage", | |
# "ImageLeftWidget": choice(sample_images), | |
"source": './images/{}'.format(choice(self.sample_images)), | |
"text": row['cdprincipal'], | |
"secondary_text": row['dsdetalhe'], | |
"callback": lambda x: x, | |
} | |
) | |
''' EXPLICANDO O CÓDIGO ACIMA''' | |
# As duas funções são muito parecidas, isso explica eu ter a opção de utiliza | |
# apenas uma função, como disse acima foi optativo criar duas funções. | |
# Na linha 62 temos a consulta de dados diretamete do Postgres, essa consulta | |
# está dentro da classe e fora das funções para que seja reaproveitada. | |
# Na linha 73 esvaziamos o widget para repovoá-lo. | |
# Na linha 75 fazemos a comparação antes de adicioar ao Widget observe esses pontos: | |
# a) Na linha 76 antes de comparar as strings as converteremos em maúsculas com .upper() | |
# dessa maneira tanto o texto do banco de dados quanto o digitado no campo serão maiúsculo | |
# b) Utilizo a cláusula or (OU) para comparar com mais de um campo, assim posso | |
# digitar tanto descrição como código e ele pesquisará. | |
# Na linha 77-86 foi explicado no vídeo anterior. | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment