Verwendung von Python Kivy ③-Linkage mit WebAPI (vom Senden und Empfangen von Anforderungen bis zur Anzeige einer Ergebnisliste, Übergang mehrerer Bildschirme) -

Zusammenfassung

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).

Was zu erstellen

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.

Startbildschirm (Listenanzeige)

1_50.jpg

Detailbildschirm

2_50.jpg

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.

Aktuelle Suchergebnisse

3_50.jpg

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.

Detailbildschirm (wenn Suchergebnisse ausgewählt sind)

4_50.jpg

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

Listenbildschirm (beim Übergang vom Suchbegriff- und Detailbildschirm)

5_50.jpg

Wenn Sie zum Listenbildschirm zurückkehren, sehen Sie, dass sich das aus der Liste ausgewählte Element im ausgewählten Status befindet (roter Rahmen).

Was man neu lernen kann

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.

Referenzlink

Ich werde Ihnen eine Referenz geben.

Eine Video-Erklärung von ListView.

Über was zu suchen

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

Über das Programm

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.

Überprüfungsumgebung

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.

Code

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()

Kv-Datei

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'

Kommentar

Die Diskussion beginnt mit Kv Language.

Über das Widget "Book Search Root"

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.

action_bar.jpg

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.

form.jpg

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.

6_50.jpg

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

7_50.jpg

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

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.

data

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)
args_converter
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.

cls
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. 4_50.jpg

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.

Recommended Posts

Verwendung von Python Kivy ③-Linkage mit WebAPI (vom Senden und Empfangen von Anforderungen bis zur Anzeige einer Ergebnisliste, Übergang mehrerer Bildschirme) -
Started Python: Tauschen Sie das im SQL-Ergebnis erhaltene Array von Werten in den Listentyp aus und verwenden Sie es in IN einer anderen Abfrage
Zusammenfassung der Verwendung der Python-Liste
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
Wie identifiziere ich das Element mit der geringsten Anzahl von Zeichen in einer Python-Liste?
So schreiben Sie einen Listen- / Wörterbuchtyp von Python3
Verwendung von Python Kivy ~ ~ Grundlagen der Kv-Sprache ~
[Python] So löschen Sie eine Zeile / Spalte in einer Tabelle (Liste der Optionen für die Drop-Methode)
[Python] So erstellen Sie eine Tabelle aus einer Liste (grundlegende Operation zum Erstellen von Tabellen / Ändern des Matrixnamens)
[Python] Was ist ein Tupel? Erklärt, wie man es benutzt und wie man es benutzt, ohne zu tippen.
[Python] So erstellen Sie eine Liste von Zeichenfolgen Zeichen für Zeichen
So schneiden Sie ein Block-Multiple-Array aus einem Multiple-Array in Python
So mischen Sie einen Teil der Python-Liste (at random.shuffle)
[Python] Zusammenfassung der Verwendung von Split- und Join-Funktionen
So zeigen Sie eine Liste der mit pyenv installierbaren Versionen an
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
So erhalten Sie eine Liste der integrierten Ausnahmen für Python
Python: Erstellen Sie ein Wörterbuch aus einer Liste von Schlüsseln und Werten
So erhalten Sie eine Liste mit Links von einer Seite aus Wikipedia
[Python] Verwendung von Liste 1
[Python] Was ist ein Slice? Eine leicht verständliche Erklärung zur Verwendung anhand eines konkreten Beispiels
[Python] Was ist Pip? Erläutern Sie die Befehlsliste und deren Verwendung anhand aktueller Beispiele
So erstellen Sie eine Überwachungskamera (Überwachungskamera) mit Opencv und Python
Verwendung von Python Kivy (Referenz) -Ich habe die Kivy-Sprache der API-Referenz übersetzt-
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Übergeben Sie die Liste von Python an C ++ als Referenz in pybind11
So entfernen Sie Duplikate aus einer Python-Liste unter Beibehaltung der Reihenfolge.
So löschen Sie mehrere angegebene Positionen (Indizes) in einer Python-Liste
Python: So verwenden Sie Async mit
Verwendung von Anfragen (Python Library)
[Python] Verwendung von Liste 3 Hinzugefügt
So fügen Sie OpenCV in Raspberry Pi ein und sammeln mit Python ganz einfach Bilder von Gesichtserkennungsergebnissen
[Python] Erstellen einer Wörterbuchtypliste, Hinzufügen / Ändern / Löschen von Elementen und Extrahieren mit einer for-Anweisung
[Python] Erklärt anhand eines konkreten Beispiels, wie die Bereichsfunktion verwendet wird
[Python] So fügen Sie eine beliebige Anzahl von Standardeingaben in die Liste ein
Stellen Sie von Python aus eine Verbindung zu postgreSQL her und verwenden Sie gespeicherte Prozeduren in einer Schleife.
[Python] Verwendung von Liste 2 Referenz des Listenwerts, der Anzahl der Elemente, des Maximalwerts und des Minimalwerts
Erhalten Sie eine Liste der Ergebnisse der Parallelverarbeitung in Python mit Starmap
So formatieren Sie eine Liste von Wörterbüchern (oder Instanzen) in Python
Python: Tipps zum Anzeigen eines Arrays (einer Liste) mit einem Index (wie man herausfindet, welche Nummer ein Element eines Arrays ist)
[Python] Zusammenfassung der Verwendung von Pandas
So installieren und verwenden Sie pandas_datareader [Python]
[Python] So konvertieren Sie eine zweidimensionale Liste in eine eindimensionale Liste
[Python2.7] Zusammenfassung der Verwendung von unittest
Python: Verwendung von Einheimischen () und Globalen ()
Verwendung von Python zip und Aufzählung
[Python2.7] Zusammenfassung der Verwendung des Unterprozesses
Verwendung ist und == in Python
[Frage] Wie verwende ich plot_surface von Python?
Verwenden Sie Ruby und Python, um die Wahrscheinlichkeit zu ermitteln, dass eine Karte mit einer natürlichen Zahl von 1 bis 100 ein Vielfaches von 3 und kein Vielfaches von 5 ist.
Ich habe eine einfache Mail-Sendeanwendung mit tkinter von Python erstellt
Verwendung von OAuth und API für Dienstkonten mit Google API Client für Python
WEB Scraping mit Python und versuchen, aus Bewertungen eine Wortwolke zu machen
[Python-Tipps] So rufen Sie mehrere Schlüssel mit dem Maximalwert aus dem Wörterbuch ab
[Python] So erstellen Sie eine lokale Webserverumgebung mit SimpleHTTPServer und CGIHTTPServer
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
[Einführung in die Statistik] Welche Art von Verteilung ist die t-Verteilung, die Chi-Quadrat-Verteilung und die F-Verteilung? Eine kleine Zusammenfassung der Verwendung von [Python]