Les deux derniers articles ("Bases du langage Kv", "[Créer une calculatrice](http://qiita.com/dario_okazaki/items/" 910abf09344a60dd7823) ") Je pense que Kivy a permis de créer une application avec un simple écran. Cette fois, nous allons créer une application multi-écrans (2 écrans).
Cette fois, ce que nous allons créer utilise l'API Web pour envoyer et recevoir des conditions de recherche et leurs résultats. Répertorie les résultats afin que vous puissiez voir le contenu détaillé de l'élément sélectionné. Ci-dessous se trouve l'écran réel.
Depuis la vue de liste, faites glisser l'écran vers la droite ou cliquez sur le bouton «Détails» de la barre d'action pour faire glisser l'écran des détails sur le côté. Aucun élément n'est affiché car je n'ai pas effectué de recherche.
Ceci est le résultat de la saisie des conditions dans le formulaire de recherche et de la pression sur le bouton "Rechercher". Une liste des résultats de la recherche s'affiche sous le formulaire de recherche dans une liste de titres de livres. Cliquez sur un élément pour passer automatiquement à l'écran des détails.
Le nom du livre et les informations associées s'affichent sur l'écran des détails. Si vous faites glisser l'écran vers la gauche ou sélectionnez le bouton "Liste" en haut à droite de la barre d'action, Revenir à l'écran de liste
Lorsque vous revenez à l'écran de liste, vous pouvez voir que l'élément sélectionné dans la liste est dans l'état sélectionné (cadre rouge).
Les contenus à apprendre récemment sont les suivants.
Cependant, cette fois, nous utiliserons ListView car la version 1.9.2 n'a pas été publiée et les spécifications de RecycleView ne sont pas claires. De même, Adapters n'est actuellement pas recommandé car en cours de développement, mais nous l'utiliserons car aucune API alternative n'a été présentée.
Je vais vous donner une référence.
Creating Apps in Kivy - O'Reilly Media Un livre d'introduction à Kivy publié par O'Reilly en 2014. À partir de l'utilisation de base de Kivy, utilisez OpenWeatherMap (un service qui fournit des informations météorologiques avec API), ignorez les demandes et affichez les résultats en obtenant et en affichant les prévisions météorologiques pour chaque ville. Nous exportons même vers des applications mobiles telles qu'Android et IOS. Si ce livre avait été traduit en japonais, je pense qu'il n'y aurait pas eu de voix au Japon pour dire que Kivy n'était pas bien compris.
Une explication vidéo de ListView.
Cette fois, nous utiliserons l 'API fournie en externe de la recherche de la Bibliothèque nationale de la Diète. Si vous assemblez et envoyez une requête de recherche appelée CQL, les résultats de la collection seront renvoyés. Cependant, il est assez difficile d'assembler CQL à partir de zéro, et cette fois, je veux principalement gérer les données envoyées et reçues en conséquence, donc je vais l'utiliser. Le contenu de la bibliothèque est construit avec des requêtes de recherche CQL en Python, et les résultats sont affichés en envoyant et en recevant des résultats de recherche à l'aide des requêtes de bibliothèque Python.
référence
Il existe différentes manières d'écrire du code à l'aide de Kivy. C'est juste un exemple. De plus, le code source utilisé lors de la rédaction de cet article est répertorié sur Github. Cependant, les matériaux tels que les polices et les images ne sont pas placés, veuillez donc les préparer et les placer vous-même si nécessaire.
L'environnement de vérification est le suivant.
OS: Windows10 64bit Kivy:1.9.1
Python3.4※
Ci-dessous, je publierai le code et les résultats.
Le code côté Python est le suivant.
main.py
#-*- coding: utf-8 -*-
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty, ListProperty
from kivy.uix.listview import ListItemButton
from kivy.core.text import LabelBase, DEFAULT_FONT
from kivy.resources import resource_add_path
#Interface de recherche externe (API) de la Bibliothèque nationale de l'alimentation
from pyndlsearch.client import SRUClient
from pyndlsearch.cql import CQL
#Changer la police par défaut
resource_add_path('./fonts')
#resource_add_path('/storage/emulated/0/kivy/calc/fonts')
LabelBase.register(DEFAULT_FONT, 'mplus-2c-regular.ttf') #Spécifiez une police japonaise pour que le japonais puisse être utilisé
class BookButton(ListItemButton):
''' search_Faire de l'élément de résultat (ListView) un bouton'''
book = ListProperty()
class SearchBookForm(BoxLayout):
search_input = ObjectProperty()
search_results = ObjectProperty() #recherche côté fichier kv_Surveiller les résultats (ListView)
def __init__(self, **kwargs):
super(SearchBookForm, self).__init__(**kwargs)
def books_args_converter(index, data_item):
'''Convertit les résultats de la recherche en un type de dictionnaire en utilisant le nom du livre comme clé.
Il est appelé et exécuté pour chaque enregistrement du résultat de la recherche.
'''
title, creater , language, publisher = data_item
return {'book': (title, creater , language, publisher )}
def search_book(self):
'''Rechercher en fonction des conditions de recherche et stocker les résultats dans ListView'''
print('search_book')
cql = CQL()
#★ Entrez les conditions de recherche
cql.title = self.search_input.text
year = self.ids['year'].text
month = self.ids['month'].text
day = self.ids['day'].text
cql.fromdate = year + '-' + month + '-' + day #Date de publication
#cql.fromdate = '2000-10-10'
#print(cql.payload())
#cql.title = 'Python'
#cql.fromdate = '2000-10-10'
#Paramètres du client NDL Search
client = SRUClient(cql)
client.set_maximum_records(int(self.ids['number'].text)) #Nombre maximum d'acquisitions
#★ Fin de l'entrée de la condition de recherche
#client.set_maximum_records(10) #Nombre maximum d'acquisitions
#print(client)
# get_response()Peut être obtenu au format xml
#res = client.get_response()
#print(res.text)
#Exécuter SRU (Exécuter la recherche en fonction des conditions d'entrée)
srres = client.get_srresponse()
#Stocker les résultats de la recherche dans la liste des livres
books = [(d.recordData.title, d.recordData.creator, d.recordData.language, d.recordData.publisher) for d in srres.records]
print(books)
print("----------------")
#Stocker dans les résultats de recherche
self.search_results.adapter.data.clear() #Supprimer les données des résultats de la recherche (pour un affichage détaillé)
self.search_results.adapter.data.extend(books) #Ajouter des résultats de recherche aux données
self.search_results._trigger_reset_populate() # search_results(list_afficher) rafraîchir
class BookInfo(BoxLayout):
'''Informations sur l'écran de détails'''
book = ListProperty(['', '','',''])
class BookSearchRoot(BoxLayout):
def __init__(self, **kwargs):
super(BookSearchRoot, self).__init__(**kwargs)
def show_book_info(self, book):
'''Formatez les informations sélectionnées et passez à l'écran des détails pour afficher'''
print('BookSearchRoot')
print(book) #Book = BookButton()Pour vérifier si la valeur de
#Si Aucun est entré dans le texte de l'étiquette, une erreur se produira, donc la conversion est effectuée.
book_convs = [x if x != None else '' for x in book] #Si aucun n'est retourné""Changer pour
#Enregistrer les informations du livre sur l'écran des détails
self.bookinfo.book = book_convs
#Passer à l'écran des détails
self.carousel.load_slide(self.bookinfo)
class BookSearchApp(App):
def __init__(self, **kwargs):
super(BookSearchApp, self).__init__(**kwargs)
self.title = 'Recherche de la bibliothèque de l'Assemblée nationale'
pass
if __name__ == '__main__':
BookSearchApp().run()
La langue Kv est la suivante.
bookSearch.kv
#: import main main
#: import ListAdapter kivy.adapters.listadapter.ListAdapter
#Widget affiché au démarrage
BookSearchRoot
<BookSearchRoot>
#Écran de liste
carousel: carousel
booklists: booklists
bookinfo: bookinfo
BoxLayout:
orientation: "vertical"
ActionBar:
ActionView:
ActionPrevious:
title: "Recherche de la bibliothèque de l'Assemblée nationale"
with_previous: False
app_icon: "./icon/32player.png "
ActionButton:
text: "liste"
#Passer à l'écran de liste
on_press: app.root.carousel.load_slide(app.root.booklists)
ActionButton:
text: "Détails"
#Aller à l'écran des détails
on_press: app.root.carousel.load_slide(app.root.bookinfo)
Carousel:
id: carousel
SearchBookForm: #Écran de liste
id: booklists
BookInfo: #Écran de détails
id: bookinfo
<SearchBookForm>
#Disposition de l'écran de liste
orientation: "vertical"
search_input: search_box #① Ajouter une variable de classe En faisant cela, auto du côté Python.search_l'entrée peut être prise
search_results: search_results_list
#Formulaire de recherche
BoxLayout:
height: "40dp"
size_hint_y: None
TextInput:
id: search_box #② Vous pouvez transmettre la valeur avec "①"
size_hint_x: 70
Button:
text: "Chercher"
size_hint_x: 30
on_press: root.search_book()
BoxLayout:
size_hint:1,.1
Label:
size_hint: .2,1
text: "Date de publication"
Spinner: #Liste des années
id: year
size_hint: .1,1
halign: 'center'
valign: 'middle'
text_size: self.size
text:'2000'
values: [str(y) for y in range(2000, 2018) ]
Label:
size_hint: .05,1
text: "Année"
Spinner:
id: month #Liste des mois
size_hint: .05,1
halign: 'center'
valign: 'middle'
text_size: self.size
text:'01'
values: ['{0:02d}'.format(x) for x in range(1,13)]
Label:
size_hint: .05,1
text: "Mois"
Spinner: #Liste des jours
id: day
size_hint: .05,1
halign: 'center'
valign: 'middle'
text_size: self.size
text:'01'
values: ['{0:02d}'.format(x) for x in range(1,30)] #Un traitement qui change le jour chaque mois est requis, mais temporairement suspendu
Label:
size_hint: .05,1
text: "journée"
Label:
size_hint: .05,1
text: "nombre"
Spinner: #Taille mensuelle
id: number
size_hint: .05,1
halign: 'center'
valign: 'middle'
text_size: self.size
text:'10'
values: ['1','5','10', '15', '20']
ListView:
id: search_results_list
adapter:
#Répertorier les résultats de la recherche et utiliser les éléments comme boutons
# data =Gardez une liste de recherches dans une liste
# CLS =Format d'affichage de la liste (cette fois, il est affiché sous forme de bouton)
# args_converter =Convertit le résultat de l'affichage en une liste avec le nom du livre comme clé.
ListAdapter(data=[], cls=main.BookButton, args_converter=main.SearchBookForm.books_args_converter)
<BookButton>
#Mise en page avec les résultats de la recherche sous forme de boutons
text_size: self.size
halign: 'left'
text: self.book[0] #Faire du titre du livre le titre du bouton
height: "40dp"
size_hint_y: None
on_press: app.root.show_book_info(self.book)
<BookInfo>
#Résultats de recherche
book: ("","","","")
orientation: "vertical"
BoxLayout:
orientation: "horizontal"
size_hint_y: None
height: "40dp"
GridLayout:
cols: 2
rows: 4
Label:
text: "Titre"
halign: 'left'
valign: 'middle'
size_hint_x: 20
text_size:self.size
Label:
text_size:self.size
halign: 'left'
valign: 'middle'
text:root.book[0]
size_hint_x: 80
Label:
text: "auteur"
halign: 'left'
valign: 'middle'
size_hint_x: 20
text_size:self.size
Label:
text: root.book[1]
size_hint_x: 80
text_size:self.size
halign: 'left'
valign: 'middle'
Label:
text: "l'éditeur"
halign: 'left'
valign: 'middle'
size_hint_x: 20
text_size:self.size
Label:
text: root.book[3]
size_hint_x: 80
#text: "l'éditeur:{} ".format(root.book[3])
text_size:self.size
halign: 'left'
valign: 'middle'
Label:
text: "Langue"
halign: 'left'
valign: 'middle'
size_hint_x: 20
text_size:self.size
Label:
text: root.book[2]
size_hint_x: 80
text_size: self.size
halign: 'left'
valign: 'middle'
La discussion commence par Kv Language.
Au démarrage, le widget "Racine de recherche de livre" s'affiche. "Book Search Root" est à peu près divisé en deux widgets.
Le Kv correspondant est le suivant.
Le code correspondant est le suivant.
```python
<BookSearchRoot>
Écran #List
carousel: carousel
booklists: booklists
bookinfo: bookinfo
BoxLayout:
orientation: "vertical"
ActionBar:
ActionView:
ActionPrevious:
title: "Recherche de la Bibliothèque nationale de la Diète"
with_previous: False
app_icon: "./icon/32player.png "
ActionButton:
texte: "liste"
# Passer à l'écran de liste
on_press: app.root.carousel.load_slide(app.root.booklists)
ActionButton:
texte: "Détails"
# Aller à l'écran des détails
on_press: app.root.carousel.load_slide(app.root.bookinfo)
Carousel:
id: carousel
SearchBookForm: # Écran Liste
id: booklists
BookInfo: écran #Detail
id: bookinfo
###À propos de Carousel
Carousel est un widget qui change d'écran (diapositives) en faisant glisser. Cette fois, 2 écrans (SearchBookForm,BookInfo) est exploité. L'utilisation est gérée à l'aide du nom et de l'identifiant du widget. Vous pouvez également faire glisser l'écran que vous souhaitez afficher automatiquement en procédant comme suit.
carousel.load_slide (id de la diapositive que vous souhaitez afficher)
Il existe d'autres propriétés telles que la modification de la vitesse de commutation, veuillez donc vous référer à la référence API pour plus de détails.
référence
La dernière fois, "clear" a été utilisé pour changer d'écran._widgets()Écran utilisant(widget)Une fois supprimé, "ajouter"_widgets()Écran utilisant(widget)est créé. Le problème avec cette méthode estIl est difficile de revenir à l'écran précédent. Il est également difficile de conserver la valeur car cela supprime le widget. En utilisant Carrousel, vous pouvez basculer entre plusieurs écrans tout en maintenant la valeur sur chaque écran.
###Barre d'action
La barre d'action en haut de l'écran est l'écran suivant.
Le code correspondant est le suivant.
ActionBar:
ActionView:
use_separator: True
ActionPrevious:
title: "Recherche de la Bibliothèque nationale de la Diète"
with_previous: False
app_icon: "./icon/32player.png "
ActionButton:
texte: "liste"
# Passer à l'écran de liste
on_press: app.root.carousel.load_slide(app.root.booklists)
ActionButton:
texte: "Détails"
# Aller à l'écran des détails
on_press: app.root.carousel.load_slide(app.root.bookinfo)
Parmi ceux-ci, la partie titre sur le côté gauche de l'écran, mais cette fois App_Une icône unique est spécifiée pour l'icône et affichée. En ce qui concerne le matériau de l'icône, la taille de l'icône Kivy d'origine est de 32 px x 32 px, j'ai donc appris la taille.
Vous pouvez également accéder à chaque écran en appuyant sur le bouton.
Comme vous pouvez le voir en exécutant ce programme, même si vous changez l'affichage de la liste ou l'écran de la liste en détail, la partie ActionBar continuera à être affichée sans disparaître de l'écran. c'estEn effet, BoxLayout est utilisé pour séparer les parties ActionBar et Carousel. Le changement d'écran et l'affichage de la liste des résultats de la recherche sont affichés sur le carrousel.
###À propos de SearchBookForm
SearchBookForm peut être divisé en deux. L'un est la partie du formulaire de recherche pour saisir les conditions de recherche, et l'autre est la partie permettant d'afficher une liste de résultats de recherche.
####À propos de la partie du formulaire de recherche
L'écran est le suivant.
Les parties Kv qui composent le formulaire sont les suivantes.
# Formulaire de recherche
BoxLayout:
height: "40dp"
size_hint_y: None
TextInput:
id: search_box # ② Vous pouvez passer la valeur avec "①"
size_hint_x: 70
Button:
recherche de texte"
size_hint_x: 30
on_press: root.search_book()
BoxLayout:
size_hint:1,.1
Label:
size_hint: .2,1
texte: "Date de publication"
Spinner: #Liste des années
id: year
size_hint: .1,1
halign: 'center'
valign: 'middle'
text_size: self.size
text:'2000'
values: [str(y) for y in range(2000, 2018) ]
Label:
size_hint: .05,1
texte: "année"
Spinner:
id: month # Liste des mois
size_hint: .05,1
halign: 'center'
valign: 'middle'
text_size: self.size
text:'01'
values: ['{0:02d}'.format(x) for x in range(1,13)]
Label:
size_hint: .05,1
texte: "Mois"
Spinner: # Liste des jours
id: day
size_hint: .05,1
halign: 'center'
valign: 'middle'
text_size: self.size
text:'01'
values: ['{0: 02d}'. format (x) for x in range (1,30)] # Un traitement qui change le jour chaque mois est requis, mais temporairement suspendu
Label:
size_hint: .05,1
texte: "jour"
Label:
size_hint: .05,1
texte: "Numéro"
Spinner: taille #Monthly
id: number
size_hint: .05,1
halign: 'center'
valign: 'middle'
text_size: self.size
text:'10'
values: ['1','5','10', '15', '20']
Parmi ceux-ci, TexInput()A été expliqué jusqu'à la dernière fois dans la partie de saisie de caractères. Au fait, c'est un bogue de Kivy que IME n'ouvre pas en entrant des caractères sous Windows OS. Lors d'une recherche en japonais, copiez et collez la valeur saisie dans le Bloc-notes, etc.
Ensuite, j'utilise "Spinner" cette fois pour sélectionner une liste de dates. Cliquez sur Spinner pour afficher une liste dans laquelle vous pouvez sélectionner des éléments.
Le Kv correspondant de l'année est le suivant.
Spinner: #Liste des années
id: year
size_hint: .1,1
halign: 'center'
valign: 'middle'
text_size: self.size
text:'2000'
values: [str(y) for y in range(2000, 2018) ]
Les valeurs que vous mettez dans Valeurs sont répertoriées.
Veuillez vous référer à la référence API pour plus de détails.
Spinner
####À propos de la partie d'affichage de l'écran de liste
Ensuite, l'explication de la partie affichant la liste des résultats de recherche
。
Les parties Kv qui composent le formulaire sont les suivantes.
ListView:
id: search_results_list
adapter:
# Lister les résultats de la recherche et créer des boutons d'éléments
# data = Conserver une liste de recherches
# CLS = Format d'affichage de la liste (cette fois, il est affiché sous forme de bouton)
# args_converter = Convertit le résultat d'affichage en une liste avec le nom du livre comme clé.
ListAdapter(data=[], cls=main.BookButton, args_converter=main.SearchBookForm.books_args_converter)
Tout d'abord, parlons de ListView.
ListView est un widget permettant d'afficher des données sous forme de liste. Pour une utilisation simple, voir "élément"_Entrez la structure de la liste dans une propriété appelée "chaînes". Par exemple, dans le cas du code suivant, item_Les chaînes contiendront des nombres consécutifs de 0 à 100, et une fois exécutées, les éléments de 0 à 100 seront affichés au format Label.
class MainView(ListView):
def __init__(self, **kwargs):
super(MainView, self).__init__(
item_strings=[str(index) for index in range(100)])
Cependant, étant donné que seule l'étiquette est affichée dans ce format, elle ne peut pas être sélectionnée et utilisée. Alors cette fois,AdaptersUtilisez la méthode pour changer la liste en affichage de bouton.
ListAdapter(data=[], cls=main.BookButton, args_converter=main.SearchBookForm.books_args_converter)
L'explication de l'argument est la suivante.
+data: conserve les informations des résultats de recherche dans une liste
Je vais expliquer chaque élément par rapport au fichier du côté Python.
les données contiennent la valeur du résultat de la recherche Cette fois, lorsque vous recherchez, les taples suivants seront renvoyés.
Le code correspondant est le suivant.
def search_book(self):
'' 'Rechercher en fonction des conditions de recherche et stocker les résultats dans ListView' ''
~ Omis ~
# Exécution SRU (recherche basée sur les conditions d'entrée)
srres = client.get_srresponse()
# Stocker les résultats de la recherche dans la liste des livres
books = [(d.recordData.title, d.recordData.creator, d.recordData.language, d.recordData.publisher) for d in srres.records]
print(books)
print("----------------")
#Store dans les résultats de recherche
self.search_results.adapter.data.clear () # Effacer les données des résultats de recherche (pour un affichage détaillé)
self.search_results.adapter.data.extend (livres) # Ajouter des résultats de recherche aux données
Actualiser self.search_results._trigger_reset_populate () # search_results (list_view)
Les valeurs stockées dans la liste des livres sont:
[('Cours d'introduction à Python à retenir dans 10 jours', 'Mikio Hogari, Manabu Terada, Naoki Nakanishi, Naotaka Hotta, Takashi Nagai', 'jpn', 'Shoshusha')
~ Omis ~
('Fonctionné avec un outil spécifique au robot qui contrôle les jouets connectés Bluetooth, automatisé avec Python', Aucun, 'jpn', '')]
Le résultat précédent des données est supprimé et nouvellement placé à l'emplacement correspondant ci-dessous. ensuite"_trigger_reset_L'affichage est mis à jour avec "peupler".
self.search_results.adapter.data.clear () # Effacer les données des résultats de recherche (pour un affichage détaillé)
self.search_results.adapter.data.extend (livres) # Ajouter des résultats de recherche aux données
Actualiser self.search_results._trigger_reset_populate () # search_results (list_view)
def books_args_converter(index, data_item):
'' 'Convertit les résultats de la recherche en type de dictionnaire avec le nom du livre comme clé.
Il est appelé et exécuté pour chaque enregistrement du résultat de la recherche.
''
title, creater , language, publisher = data_item
return {'book': (title, creater , language, publisher )}
args_le convertisseur utilise les informations du livre du résultat de la recherche comme clé et argument_Il est stocké dans le convertisseur.
class BookButton(ListItemButton):
'' 'Utilisez l'élément search_results (ListView) comme bouton' ''
book = ListProperty()
cls définit le format d'affichage de la liste. Cette fois, les informations du livre sont converties en une liste, stockées dans le livre et affichées sur le bouton. De plus, cls est probablement une abréviation de L'écran clair et est utilisé pour signifier l'écran clair et réafficher.
Concernant le format d'affichage, utilisez les propriétés suivantes du côté Kv.
<BookButton>
# Mise en page avec les résultats de la recherche sous forme de boutons
text_size: self.size
halign: 'left'
text: self.book [0] # Faire du titre du livre le titre du bouton
height: "40dp"
size_hint_y: None
on_press: app.root.show_book_info(self.book)
Le concept d'Adpter est difficile à utiliser et je ne le comprends pas entièrement, mais "data",「cls」,「args_Une fois que vous savez que vous pouvez modifier le paramètre de format d'affichage de la liste en définissant une valeur dans "convertisseur", tout va bien.
référence
###À propos du widget "Informations sur le livre"
Ceci est une description de l'écran des détails.
L'écran est le suivant.
Le fichier Kv est le suivant.
<BookInfo>
# Résultats de recherche
book: ("","","","")
orientation: "vertical"
BoxLayout:
orientation: "horizontal"
size_hint_y: None
height: "40dp"
GridLayout:
cols: 2
rows: 4
Label:
texte: "Titre"
halign: 'left'
valign: 'middle'
size_hint_x: 20
text_size:self.size
Label:
text_size:self.size
halign: 'left'
valign: 'middle'
text:root.book[0]
size_hint_x: 80
Label:
texte: "auteur"
halign: 'left'
valign: 'middle'
size_hint_x: 20
text_size:self.size
Label:
text: root.book[1]
size_hint_x: 80
text_size:self.size
halign: 'left'
valign: 'middle'
Label:
texte: "Éditeur"
halign: 'left'
valign: 'middle'
size_hint_x: 20
text_size:self.size
Label:
text: root.book[3]
size_hint_x: 80
#text: "Éditeur: {}" .format (root.book [3])
text_size:self.size
halign: 'left'
valign: 'middle'
Label:
texte: "langue"
halign: 'left'
valign: 'middle'
size_hint_x: 20
text_size:self.size
Label:
text: root.book[2]
size_hint_x: 80
text_size: self.size
halign: 'left'
valign: 'middle'
Cliquez sur le widget "Bouton Réserver" pour ouvrir.show_book_info()Est exécuté. show_book_info() Formate les informations du livre et affiche le widget "BookInfo" (écran détaillé).
Je ne fais rien de particulièrement difficile ici, juste afficher les résultats. La seule nouveauté que je fais est d'aligner les caractères sur le bord gauche et de les envelopper.
Label:
text_size:self.size
halign: 'left'
valign: 'middle'
text:root.book[0]
size_hint_x: 80
Si vous laissez le texte par défaut de Label, s'il s'agit d'une longue ligne, il sera affiché sur une ligne au-delà de Label, donc "texte"_"taille" spécifie la taille comme la taille de l'étiquette. Ensuite, utilisez "halign" pour justifier à gauche l'affichage horizontal et "valign" pour afficher l'affichage vertical au milieu.
référence
#Résumé Vous savez maintenant comment afficher plusieurs écrans, rechercher en fonction de plusieurs éléments d'entrée, répertorier les résultats et afficher les détails de chaque élément. Jusqu'à ce moment, je pense que vous avez en quelque sorte compris comment créer une application de bureau utilisant des boutons.
La prochaine fois, j'essaierai de l'afficher sur un appareil Android basé sur ce programme.
D'ailleurs, c'était assez difficile car il fallait apporter des modifications majeures au programme avant de l'afficher sur Android.
#Référence: À propos de l'empaquetage de fichiers Si vous souhaitez utiliser Kivy pour empaqueter vos fichiers, vous pouvez utiliser PyInstaller pour les empaqueter. Séparément si vous souhaitez exécuter dans WindowsPyWin32Doit être installé.
référence
#Suite de ce contenu J'ai posté un nouvel article.
Recommended Posts