Die letzten beiden Artikel ("Kv Language Basics", "Create a Calculator 910abf09344a60dd7823) ”) Ich denke, Kivy hat es möglich gemacht, eine App mit einem einfachen Bildschirm zu erstellen. Dieses Mal erstellen wir eine Anwendung mit mehreren Bildschirmen (2 Bildschirme).
Dieses Mal verwendet das, was wir erstellen, die Web-API, um Suchbedingungen und deren Ergebnisse zu senden und zu empfangen. Listet die Ergebnisse auf, damit Sie den detaillierten Inhalt des ausgewählten Elements sehen können. Unten ist der aktuelle Bildschirm.
Ziehen Sie in der Listenansicht den Bildschirm nach rechts oder klicken Sie in der Aktionsleiste auf die Schaltfläche "Details", um den Detailbildschirm von der Seite zu schieben. Es werden keine Elemente angezeigt, da ich nicht gesucht habe.
Dies ist das Ergebnis der Eingabe der Bedingungen in das Suchformular und des Drücken der Schaltfläche "Suchen". Eine Liste der Suchergebnisse wird unter dem Suchformular in einer Liste der Buchtitel angezeigt. Klicken Sie auf ein Element, um automatisch zum Detailbildschirm zu gelangen.
Der Buchname und die zugehörigen Informationen werden auf dem Detailbildschirm angezeigt. Wenn Sie den Bildschirm nach links ziehen oder die Schaltfläche "Liste" oben rechts in der Aktionsleiste auswählen, Kehren Sie zum Listenbildschirm zurück
Wenn Sie zum Listenbildschirm zurückkehren, sehen Sie, dass sich das aus der Liste ausgewählte Element im ausgewählten Status befindet (roter Rahmen).
Die neu zu lernenden Inhalte sind wie folgt.
Dieses Mal werden wir jedoch ListView verwenden, da 1.9.2 nicht veröffentlicht wurde und die Spezifikationen von RecycleView nicht klar sind. In ähnlicher Weise werden Adapter derzeit nicht empfohlen, da sie sich in der Entwicklung befinden. Wir werden sie jedoch verwenden, da keine alternative API vorgestellt wurde.
Ich werde Ihnen eine Referenz geben.
Creating Apps in Kivy - O'Reilly Media Ein Einführungsbuch zu Kivy, das 2014 von O'Reilly veröffentlicht wurde. Verwenden Sie bei der grundlegenden Verwendung von Kivy OpenWeatherMap (einen Dienst, der Wetterinformationen mit API bereitstellt), überspringen Sie Anforderungen und zeigen Sie die Ergebnisse an, indem Sie die Wettervorhersage für jede Stadt abrufen und anzeigen. Wir exportieren sogar in mobile Apps wie Android und IOS. Wenn dieses Buch ins Japanische übersetzt worden wäre, hätte es in Japan meiner Meinung nach keine Stimme gegeben, die besagt, dass Kivy nicht gut verstanden wurde.
Eine Video-Erklärung von ListView.
Dieses Mal verwenden wir die extern bereitgestellte API der Suche in der National Diet Library. Wenn Sie eine Suchabfrage namens CQL zusammenstellen und senden, werden die Erfassungsergebnisse zurückgegeben. Es ist jedoch ziemlich mühsam, CQL von Grund auf neu zusammenzusetzen, und dieses Mal möchte ich hauptsächlich die als Ergebnis gesendeten und empfangenen Daten verarbeiten, daher werde ich dies verwenden. Der Inhalt der Bibliothek wird mit CQL-Suchabfragen in Python erstellt, und die Ergebnisse werden angezeigt, indem Suchergebnisse mithilfe der Python-Bibliotheksanforderungen gesendet und empfangen werden.
Referenz
Es gibt verschiedene Möglichkeiten, Code mit Kivy zu schreiben. Dies ist nur ein Beispiel. Außerdem ist der beim Schreiben dieses Artikels verwendete Quellcode auf Github aufgeführt. Materialien wie Schriftarten und Bilder werden jedoch nicht platziert. Bereiten Sie sie daher vor und platzieren Sie sie gegebenenfalls selbst.
Die Überprüfungsumgebung ist wie folgt.
OS: Windows10 64bit Kivy:1.9.1
Python3.4※
Unten werde ich den Code und die Ergebnisse veröffentlichen.
Der Code auf der Python-Seite lautet wie folgt.
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
#Suche nach extern bereitgestellten Schnittstellen (API) der National Diet Library Search
from pyndlsearch.client import SRUClient
from pyndlsearch.cql import CQL
#Ändern Sie die Standardschriftart
resource_add_path('./fonts')
#resource_add_path('/storage/emulated/0/kivy/calc/fonts')
LabelBase.register(DEFAULT_FONT, 'mplus-2c-regular.ttf') #Geben Sie eine japanische Schriftart an, damit Japanisch verwendet werden kann
class BookButton(ListItemButton):
''' search_Machen Sie das Ergebniselement (ListView) zu einer Schaltfläche'''
book = ListProperty()
class SearchBookForm(BoxLayout):
search_input = ObjectProperty()
search_results = ObjectProperty() #Suche auf der Seite der kv-Datei_Ergebnisse überwachen (ListView)
def __init__(self, **kwargs):
super(SearchBookForm, self).__init__(**kwargs)
def books_args_converter(index, data_item):
'''Konvertiert Suchergebnisse in einen Wörterbuchtyp, wobei der Buchname als Schlüssel verwendet wird.
Es wird für jeden Datensatz des Suchergebnisses aufgerufen und ausgeführt.
'''
title, creater , language, publisher = data_item
return {'book': (title, creater , language, publisher )}
def search_book(self):
'''Suchen Sie anhand der Suchbedingungen und speichern Sie die Ergebnisse in ListView'''
print('search_book')
cql = CQL()
#★ Suchbedingungen eingeben
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 #Veröffentlichungsdatum
#cql.fromdate = '2000-10-10'
#print(cql.payload())
#cql.title = 'Python'
#cql.fromdate = '2000-10-10'
#NDL Search Client-Einstellungen
client = SRUClient(cql)
client.set_maximum_records(int(self.ids['number'].text)) #Maximale Anzahl von Akquisitionen
#★ Ende der Eingabe der Suchbedingung
#client.set_maximum_records(10) #Maximale Anzahl von Akquisitionen
#print(client)
# get_response()Kann im XML-Format bezogen werden
#res = client.get_response()
#print(res.text)
#SRU-Ausführung (Suche basierend auf Eingabebedingungen)
srres = client.get_srresponse()
#Suchergebnisse in Buchliste speichern
books = [(d.recordData.title, d.recordData.creator, d.recordData.language, d.recordData.publisher) for d in srres.records]
print(books)
print("----------------")
#In Suchergebnissen speichern
self.search_results.adapter.data.clear() #Suchergebnisdaten löschen (zur detaillierten Anzeige)
self.search_results.adapter.data.extend(books) #Fügen Sie Daten Suchergebnisse hinzu
self.search_results._trigger_reset_populate() # search_results(list_Ansicht) aktualisieren
class BookInfo(BoxLayout):
'''Details Bildschirminformationen'''
book = ListProperty(['', '','',''])
class BookSearchRoot(BoxLayout):
def __init__(self, **kwargs):
super(BookSearchRoot, self).__init__(**kwargs)
def show_book_info(self, book):
'''Formatieren Sie die ausgewählten Informationen und wechseln Sie zum Detailbildschirm, um sie anzuzeigen'''
print('BookSearchRoot')
print(book) #Book = BookButton()Zur Überprüfung, ob der Wert von
#Wenn im Text des Etiketts Keine eingegeben wird, tritt ein Fehler auf, sodass die Konvertierung durchgeführt wird.
book_convs = [x if x != None else '' for x in book] #Wenn Keine zurückgegeben wird""Ändern
#Speichern Sie Buchinformationen auf dem Detailbildschirm
self.bookinfo.book = book_convs
#Zum Detailbildschirm wechseln
self.carousel.load_slide(self.bookinfo)
class BookSearchApp(App):
def __init__(self, **kwargs):
super(BookSearchApp, self).__init__(**kwargs)
self.title = 'Suche in der Nationalversammlungsbibliothek'
pass
if __name__ == '__main__':
BookSearchApp().run()
Die Kv-Sprache ist wie folgt.
bookSearch.kv
#: import main main
#: import ListAdapter kivy.adapters.listadapter.ListAdapter
#Widget wird beim Start angezeigt
BookSearchRoot
<BookSearchRoot>
#Listenbildschirm
carousel: carousel
booklists: booklists
bookinfo: bookinfo
BoxLayout:
orientation: "vertical"
ActionBar:
ActionView:
ActionPrevious:
title: "Suche in der Nationalversammlungsbibliothek"
with_previous: False
app_icon: "./icon/32player.png "
ActionButton:
text: "Aufführen"
#Wechseln Sie zum Listenbildschirm
on_press: app.root.carousel.load_slide(app.root.booklists)
ActionButton:
text: "Einzelheiten"
#Gehen Sie zum Detailbildschirm
on_press: app.root.carousel.load_slide(app.root.bookinfo)
Carousel:
id: carousel
SearchBookForm: #Listenbildschirm
id: booklists
BookInfo: #Detailbildschirm
id: bookinfo
<SearchBookForm>
#Bildschirmlayout auflisten
orientation: "vertical"
search_input: search_box #① Klassenvariable hinzufügen Auf diese Weise selbst auf der Python-Seite.search_Eingabe kann genommen werden
search_results: search_results_list
#Suchformular
BoxLayout:
height: "40dp"
size_hint_y: None
TextInput:
id: search_box #② Sie können den Wert mit "①" übergeben.
size_hint_x: 70
Button:
text: "Suche"
size_hint_x: 30
on_press: root.search_book()
BoxLayout:
size_hint:1,.1
Label:
size_hint: .2,1
text: "Veröffentlichungsdatum"
Spinner: #Liste der Jahre
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: "Jahr"
Spinner:
id: month #Liste der Monate
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: "Mond"
Spinner: #Liste der Tage
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)] #Eine Verarbeitung, die den Tag jeden Monat ändert, ist erforderlich, wird jedoch vorübergehend ausgesetzt
Label:
size_hint: .05,1
text: "Tag"
Label:
size_hint: .05,1
text: "Nummer"
Spinner: #Monatsgröße
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:
#Listen Sie die Suchergebnisse auf und verwenden Sie Elemente als Schaltflächen
# data =Führen Sie eine Liste der Suchvorgänge in einer Liste
# CLS =Listenanzeigeformat (diesmal wird es als Schaltfläche angezeigt)
# args_converter =Konvertieren Sie das Anzeigeergebnis in eine Liste mit dem Buchnamen als Schlüssel.
ListAdapter(data=[], cls=main.BookButton, args_converter=main.SearchBookForm.books_args_converter)
<BookButton>
#Layout mit Suchergebnissen als Schaltflächen
text_size: self.size
halign: 'left'
text: self.book[0] #Machen Sie den Buchtitel zum Titel der Schaltfläche
height: "40dp"
size_hint_y: None
on_press: app.root.show_book_info(self.book)
<BookInfo>
#Suchergebnisse
book: ("","","","")
orientation: "vertical"
BoxLayout:
orientation: "horizontal"
size_hint_y: None
height: "40dp"
GridLayout:
cols: 2
rows: 4
Label:
text: "Titel"
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: "Autor"
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: "der Herausgeber"
halign: 'left'
valign: 'middle'
size_hint_x: 20
text_size:self.size
Label:
text: root.book[3]
size_hint_x: 80
#text: "der Herausgeber:{} ".format(root.book[3])
text_size:self.size
halign: 'left'
valign: 'middle'
Label:
text: "Sprache"
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'
Die Diskussion beginnt mit Kv Language.
Beim Start wird das Widget "Book Search Root" angezeigt. "Book Search Root" ist grob in zwei Widgets unterteilt.
Das entsprechende Kv ist wie folgt.
Der entsprechende Code lautet wie folgt.
```python
<BookSearchRoot>
# Listenbildschirm
carousel: carousel
booklists: booklists
bookinfo: bookinfo
BoxLayout:
orientation: "vertical"
ActionBar:
ActionView:
ActionPrevious:
Titel: "National Diet Library Search"
with_previous: False
app_icon: "./icon/32player.png "
ActionButton:
Text: "Liste"
# Zum Listenbildschirm wechseln
on_press: app.root.carousel.load_slide(app.root.booklists)
ActionButton:
Text: "Details"
# Gehen Sie zum Detailbildschirm
on_press: app.root.carousel.load_slide(app.root.bookinfo)
Carousel:
id: carousel
SearchBookForm: # Listenbildschirm
id: booklists
BookInfo: # Detailbildschirm
id: bookinfo
###Über Karussell
Karussell ist ein Widget, das Bildschirme (Folien) durch Wischen wechselt. Diesmal 2 Bildschirme (SearchBookForm,BookInfo) wird betrieben. Die Verwendung wird unter Verwendung des Widget-Namens und der ID ausgeführt. Sie können den Bildschirm, den Sie automatisch anzeigen möchten, auch wie folgt wischen.
carousel.load_slide (ID der Folie, die Sie anzeigen möchten)
Es gibt andere Eigenschaften, z. B. das Ändern der Schaltgeschwindigkeit. Weitere Informationen finden Sie in der API-Referenz.
Referenz
Beim letzten Mal wurde "Löschen" verwendet, um die Bildschirme zu wechseln._widgets()Bildschirm mit(widget)Nach dem Löschen "hinzufügen"_widgets()Bildschirm mit(widget)geschaffen. Das Problem bei dieser Methode istEs ist schwierig, zum vorherigen Bildschirm zurückzukehren. Es ist auch schwierig, den Wert beizubehalten, da dadurch das Widget gelöscht wird. Mit Karussell können Sie zwischen mehreren Bildschirmen wechseln, während Sie den Wert auf jedem Bildschirm beibehalten.
###Aktionsleiste
Die Aktionsleiste am oberen Bildschirmrand ist der folgende Bildschirm.
Der entsprechende Code lautet wie folgt.
ActionBar:
ActionView:
use_separator: True
ActionPrevious:
Titel: "National Diet Library Search"
with_previous: False
app_icon: "./icon/32player.png "
ActionButton:
Text: "Liste"
# Zum Listenbildschirm wechseln
on_press: app.root.carousel.load_slide(app.root.booklists)
ActionButton:
Text: "Details"
# Gehen Sie zum Detailbildschirm
on_press: app.root.carousel.load_slide(app.root.bookinfo)
Davon der Titelteil auf der linken Seite des Bildschirms, diesmal jedoch App_Für das Symbol wird ein eindeutiges Symbol angegeben und angezeigt. Was das Symbolmaterial betrifft, ist die Größe des ursprünglichen Kivy-Symbols 32 x 32 Pixel, also habe ich die Größe gelernt.
Sie können auch zu jedem Bildschirm wechseln, indem Sie die Taste drücken.
Wie Sie beim Ausführen dieses Programms sehen können, wird der ActionBar-Teil auch dann angezeigt, wenn Sie die Listenanzeige oder den Bildschirm im Detail von der Liste abweichen, ohne vom Bildschirm zu verschwinden. das istDies liegt daran, dass BoxLayout zum Trennen der Teile ActionBar und Karussell verwendet wird. Bildschirmumschaltung und Listenanzeige der Suchergebnisse werden auf dem Karussell angezeigt.
###Über SearchBookForm
SearchBookForm kann grob in zwei Teile geteilt werden. Einer ist der Teil des Suchformulars zum Eingeben von Suchbedingungen und der andere Teil zum Anzeigen einer Liste von Suchergebnissen.
####Über den Suchformularteil
Der Bildschirm ist wie folgt.
Die Kv-Teile, aus denen das Formular besteht, sind wie folgt.
# Suchformular
BoxLayout:
height: "40dp"
size_hint_y: None
TextInput:
id: search_box # ② Sie können den Wert mit "①" übergeben.
size_hint_x: 70
Button:
Textsuche"
size_hint_x: 30
on_press: root.search_book()
BoxLayout:
size_hint:1,.1
Label:
size_hint: .2,1
Text: "Veröffentlichungsdatum"
Spinner: #Liste der Jahre
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: "Jahr"
Spinner:
id: month # Liste der Monate
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: "Monat"
Spinner: # Liste der Tage
id: day
size_hint: .05,1
halign: 'center'
valign: 'middle'
text_size: self.size
text:'01'
Werte: ['{0: 02d}'. Format (x) für x im Bereich (1,30)] # Eine Verarbeitung, die den Tag jeden Monat ändert, ist erforderlich, wird jedoch vorübergehend ausgesetzt
Label:
size_hint: .05,1
Text: "Tag"
Label:
size_hint: .05,1
Text: "Nummer"
Spinner: #Monatliche Größe
id: number
size_hint: .05,1
halign: 'center'
valign: 'middle'
text_size: self.size
text:'10'
values: ['1','5','10', '15', '20']
Davon TexInput()Wurde bis zum letzten Mal im Zeicheneingabeteil erklärt. Übrigens ist es ein Fehler von Kivy, dass IME nicht durch Eingabe von Zeichen unter Windows geöffnet wird. Kopieren Sie bei der Suche auf Japanisch den in Notepad usw. eingegebenen Wert und fügen Sie ihn ein.
Als nächstes verwende ich dieses Mal "Spinner", um eine Liste von Daten auszuwählen. Klicken Sie auf Spinner, um eine Liste anzuzeigen, aus der Sie Elemente auswählen können.
Der entsprechende Kv des Jahres lautet wie folgt.
Spinner: #Liste der Jahre
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) ]
Die Werte, die Sie in Werte eingeben, werden aufgelistet.
Weitere Informationen finden Sie in der API-Referenz.
Spinner
####Informationen zum Anzeigeteil des Listenbildschirms
Als nächstes die Erläuterung des Teils, in dem die Liste der Suchergebnisse angezeigt wird
。
Die Kv-Teile, aus denen das Formular besteht, sind wie folgt.
ListView:
id: search_results_list
adapter:
# Suchergebnisse auflisten und Schaltflächen für Elemente erstellen
# data = Führen Sie eine Liste der Suchvorgänge
# CLS = Listenanzeigeformat (diesmal wird es als Schaltfläche angezeigt)
# args_converter = Konvertiert das Anzeigeergebnis in eine Liste mit dem Buchnamen als Schlüssel.
ListAdapter(data=[], cls=main.BookButton, args_converter=main.SearchBookForm.books_args_converter)
Lassen Sie uns zunächst über ListView sprechen.
ListView ist ein Widget zum Anzeigen von Daten im Listenformat. Zur einfachen Verwendung siehe "Artikel"_Geben Sie die Listenstruktur in eine Eigenschaft namens "Strings" ein. Beispiel: Im Fall des folgenden Codes ist item_Die Zeichenfolgen enthalten fortlaufende Nummern von 0 bis 100, und wenn sie ausgeführt werden, werden die Elemente von 0 bis 100 im Beschriftungsformat angezeigt.
class MainView(ListView):
def __init__(self, **kwargs):
super(MainView, self).__init__(
item_strings=[str(index) for index in range(100)])
Da jedoch nur Label in diesem Format angezeigt wird, kann es nicht ausgewählt und betrieben werden. Also diesmalAdaptersVerwenden Sie die Methode, um die Liste in eine Schaltflächenanzeige zu ändern.
ListAdapter(data=[], cls=main.BookButton, args_converter=main.SearchBookForm.books_args_converter)
Die Erklärung des Arguments lautet wie folgt.
+Daten: Hält Suchergebnisinformationen in einer Liste
Ich werde jedes Element erklären, indem ich es mit der Datei auf der Python-Seite vergleiche.
Daten enthalten den Wert des Suchergebnisses Dieses Mal werden bei der Suche die folgenden Taples zurückgegeben.
Der entsprechende Code lautet wie folgt.
def search_book(self):
'' 'Suche basierend auf Suchbedingungen und speichere die Ergebnisse in ListView' ''
~ Ausgelassen ~
# SRU-Ausführung (Suche basierend auf Eingabebedingungen)
srres = client.get_srresponse()
# Suchergebnisse in Bücherliste speichern
books = [(d.recordData.title, d.recordData.creator, d.recordData.language, d.recordData.publisher) for d in srres.records]
print(books)
print("----------------")
# In Suchergebnissen speichern
self.search_results.adapter.data.clear () # Suchergebnisdaten löschen (für detaillierte Anzeige)
self.search_results.adapter.data.extend (Bücher) # Fügen Sie Daten Suchergebnisse hinzu
Aktualisieren Sie self.search_results._trigger_reset_populate () # search_results (list_view)
Die in der Bücherliste gespeicherten Werte sind:
[('Python-Einführungskurs, an den man sich in 10 Tagen erinnern sollte', 'Mikio Hogari, Manabu Terada, Naoki Nakanishi, Naotaka Hotta, Takashi Nagai', 'JPN', 'Shoshusha'),
~ Ausgelassen ~
('Betrieb mit einem roboterspezifischen Tool zur Steuerung von mit Bluetooth verbundenen Spielzeugen, automatisiert mit Python', None, 'jpn', '')]
Das vorherige Ergebnis der Daten wird gelöscht und an der entsprechenden Stelle unten neu platziert. danach"_trigger_reset_Die Anzeige wird mit "Auffüllen" aktualisiert.
self.search_results.adapter.data.clear () # Suchergebnisdaten löschen (für detaillierte Anzeige)
self.search_results.adapter.data.extend (Bücher) # Fügen Sie Daten Suchergebnisse hinzu
Aktualisieren Sie self.search_results._trigger_reset_populate () # search_results (list_view)
def books_args_converter(index, data_item):
'' 'Konvertieren Sie Suchergebnisse in einen Wörterbuchtyp mit dem Buchnamen als Schlüssel.
Es wird für jeden Datensatz des Suchergebnisses aufgerufen und ausgeführt.
''
title, creater , language, publisher = data_item
return {'book': (title, creater , language, publisher )}
args_Der Konverter verwendet die Buchinformationen des Suchergebnisses als Schlüssel und Argumente_Es wird im Konverter gespeichert.
class BookButton(ListItemButton):
'' 'Verwenden Sie das Element search_results (ListView) als Schaltfläche' ''
book = ListProperty()
cls legt das Anzeigeformat der Liste fest. Dieses Mal werden die Buchinformationen in eine Liste konvertiert, im Buch gespeichert und auf der Schaltfläche angezeigt. Darüber hinaus ist cls wahrscheinlich eine Abkürzung für The clear screen und wird verwendet, um Screen Clear und Redisplay zu bedeuten.
Verwenden Sie hinsichtlich des Anzeigeformats die folgenden Eigenschaften auf der Kv-Seite.
<BookButton>
#Layout mit Suchergebnissen als Schaltflächen
text_size: self.size
halign: 'left'
text: self.book [0] # Machen Sie den Buchtitel zum Titel der Schaltfläche
height: "40dp"
size_hint_y: None
on_press: app.root.show_book_info(self.book)
Das Konzept von Adpter ist schwierig zu verwenden und ich verstehe es nicht vollständig, aber "Daten",「cls」,「args_Sobald Sie wissen, dass Sie die Einstellung für das Listenanzeigeformat ändern können, indem Sie einen Wert in "Konverter" festlegen, ist dies in Ordnung.
Referenz
###Über das Widget "Buchinfo"
Dies ist eine Beschreibung des Detailbildschirms.
Der Bildschirm ist wie folgt.
Die Kv-Datei lautet wie folgt.
<BookInfo>
# Suchergebnisse
book: ("","","","")
orientation: "vertical"
BoxLayout:
orientation: "horizontal"
size_hint_y: None
height: "40dp"
GridLayout:
cols: 2
rows: 4
Label:
Text: "Titel"
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: "Autor"
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: "Verlag"
halign: 'left'
valign: 'middle'
size_hint_x: 20
text_size:self.size
Label:
text: root.book[3]
size_hint_x: 80
#text: "Publisher: {}" .format (root.book [3])
text_size:self.size
halign: 'left'
valign: 'middle'
Label:
Text: "Sprache"
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'
Klicken Sie auf das Widget "Buchschaltfläche", um fortzufahren.show_book_info()Wird ausgeführt. show_book_info() Formatiert die Buchinformationen und zeigt das Widget "BookInfo" an (detaillierter Bildschirm).
Ich mache hier nichts besonders Schwieriges, sondern zeige nur die Ergebnisse an. Das einzige Neue, was ich mache, ist, die Zeichen am linken Rand auszurichten und sie zu verpacken.
Label:
text_size:self.size
halign: 'left'
valign: 'middle'
text:root.book[0]
size_hint_x: 80
Wenn Sie den Standardtext von Label beibehalten und es sich um eine lange Zeile handelt, wird diese in einer Zeile hinter Label angezeigt, also "Text"._"Größe" gibt die Größe als Größe des Etiketts an. Verwenden Sie dann "halign", um die horizontale Anzeige linksbündig auszurichten, und "valign", um die vertikale Anzeige in der Mitte anzuzeigen.
Referenz
#Zusammenfassung Jetzt wissen Sie, wie Sie mehrere Bildschirme anzeigen, anhand mehrerer Eingabeelemente suchen, Ergebnisse auflisten und Details für jedes Element anzeigen. Ich glaube, Sie haben bis zu diesem Zeitpunkt irgendwie verstanden, wie man eine Desktop-Anwendung erstellt, die Schaltflächen verwendet.
Das nächste Mal werde ich versuchen, es auf einem Android-Gerät anzuzeigen, das auf diesem Programm basiert.
Übrigens war es ziemlich schwierig, weil es notwendig war, größere Änderungen am Programm vorzunehmen, bevor es auf Android angezeigt wurde.
#Referenz: Informationen zum Verpacken von Dateien Wenn Sie Ihre Dateien mit Kivy verpacken möchten, können Sie sie mit PyInstaller verpacken. Separat, wenn Sie in Windows exe möchtenPyWin32Muss installiert werden.
Referenz
#Fortsetzung dieses Inhalts Ich habe einen neuen Artikel gepostet.