Ich habe versucht, Python x Kivy de Kinoppy (Kii Kuniya Buchhandlungs-App) nachzuahmen.

Dieser Artikel ist der 14. Tag des Adventskalenders für die persönliche Entwicklung 2019. Und dies ist Qiitas erster Beitrag. Anfang.

Ich erstelle eine Windows-App mit einem Framework namens Python x Kivy.

Hintergrund

  1. Ich habe ein Papierbuch gekocht und daraus ein PDF gemacht. Erfrischend! ――Jetzt lesen wir auf dem iPad

Kinoppy (Kii Kuniya Bookstore App) ist eine sehr gute App und ich empfehle sie.

App Übersicht

Es verfügt über ein Bücherregal und eine PDF-Viewer-Funktion. pdfapp2-min.gif

Entwicklungsumgebung

AnacondaNavigator VSCode Python3.7 Kivy1.11

Verwendete Bibliothek usw.

Es gibt viele, die sich zu sehr auf andere verlassen, aber die, die ich hauptsächlich benutze, sind folgende. PDF-Rendering: pdf2image Konfigurationsdatei: ruamel.yaml Symbolschriftarten: iconfonts

Seite, die sehr hilfreich war

Kinoppy Kivy stackoverflow Arakawa Ray Blog Hauptgebäude Und Qiita:Kivy

Todo Es ist ziemlich tief und mittelmäßig, aber ich strebe Folgendes an. weit. ..

Quellcode etc.

Die folgenden zwei Kivy-Quellcodes werden extrahiert und eingeführt.

  1. Scatter Drag & Drop Thumbnails

1. Scatter Drag & Drop Thumbnails

Nehmen Sie das Miniaturbild (das im Bücherregal angezeigte Bild) einige Sekunden lang und ziehen Sie es dann per Drag & Drop, um den Bildrahmen einzufärben. Wenn Sie es loslassen, bevor Sie Drag & Drop eingeben, wird es als normaler Klick betrachtet und wechselt zum Viewer.

Library.kv



<DraggableThumbnail@Scatter>:
    image_name: ''
    image_path: ''
    image: image_id
    shelf_row: None
    shelf_col: None

    do_rotation: False
    do_scale: False
    auto_bring_to_front: True
    do_collide_after_children: True

    background_color: 0,0,0,0
    background_normal: ''

    Image:
        id: image_id
        source: root.image_path
        allow_stretch:True
        keep_ratio: True
        canvas:
            Color:
                rgb: (1, 1, 1)
            Rectangle:
                texture: self.texture
                pos: self.pos
                size: self.size

Library.py



class DraggableThumbnail(Scatter):
    image_name = StringProperty(None)
    image_path = StringProperty(None)
    shelf_row = NumericProperty(None)
    shelf_col = NumericProperty(None)

    state = OptionProperty('released',options=['grabed','released'])
    img_touched = StringProperty(None)
    t = NumericProperty(0)

    def __init__(self,**kwargs):
        super(DraggableThumbnail,self).__init__(**kwargs)
        #Uhr hier.schedule_Sie können die Größe nicht ohne einmal ändern
        Clock.schedule_once(self.drag_after_init)

    def drag_after_init(self, dt):
        self.size_hint = None,None
        self.size = self.image.size
        #Erstellen Sie hier nur den Bilderrahmen zum Ziehen und Ablegen
        with self.canvas:
            self.color = Color(rgba = (1,1,1,0))
            self.frame = Line(rectangle=(0,0,self.image.width,self.image.height))

    def on_state(self,*args):
        #Wenn Sie es greifen, machen Sie den Bilderrahmen grau.
        if self.state == 'grabed':
            self.color.rgba = (0.5,0.5,0.5,1)
        #Wenn Sie es freigeben, legen Sie es zurück.
        elif self.state == 'released':
            self.color.rgba =  (1,1,1,0)

    def time_count(self,*args):
        self.t += 0.1

    def on_t(self,*args):
        if self.t >=0.5:
            Clock.unschedule(self.time_count)
            self.t = 0
            self.state = 'grabed'
            self.img_touched = ''

    def on_touch_down(self, touch):
        self.on_state(touch)
        if self.collide_point(*touch.pos):
            Clock.schedule_interval(self.time_count, 0.1)
            self.img_touched = self.image_name

            touch.grab(self)
            return True

    def on_touch_up(self, touch):
        Clock.unschedule(self.time_count)
        self.t = 0

        if touch.grab_current is self:
            if self.img_touched == self.image_name:
                self.img_touched = ''
                if self.state == 'released':
                    #Übergang zum Betrachter
                    app= App.get_running_app()
                    app.root.chgdisp_viewer(self.image_name)
            else:
                #So fallen gelassen, Miniaturansicht Ausrichtung
                app= App.get_running_app()
                app.root.Library.lineup_thumbnail(self,touch)
            touch.ungrab(self)

        self.state = 'released'
        return True

    def on_touch_move(self, touch):
        Clock.unschedule(self.time_count)
        self.t = 0
        if self.state == 'grabed':
            self.pos = touch.x - self.image.width / 2, touch.y - self.image.height / 2
            return True
        else:
            self.img_touched = ''


2. Realisierung von Sleider rechts → links

Der Nachteil des Übersee-PDF-Viewers besteht darin, dass er kein vertikales Schreiben unterstützt (rechts → links). Kivys Schieberegler kann von links nach rechts (von unten nach oben) sein, es gibt jedoch keine Einstellung von rechts nach links. Ich wollte auch die Anzahl der Seiten beim Schieben, also habe ich es zu einem Teil gemacht. Die Quelle wird auf [Github] hochgeladen (https://github.com/MamiTakata/Kivy-ViewSlider). Ich habe gelernt, wie man Standardteile auf diese Weise anpasst. Bitte sehen Sie die Quelle, wenn Sie möchten.

Example.gif

3. (Bonus) Wie man ein Bücherregal macht

Ich hatte kein gutes Bücherregalbild, also habe ich eines gemacht. Das ist das Bild. shelf2.png

So erstellen Sie [Mein Blog hier](https://flat-kids.net/2019/10/06/inkscape0-92-4%e3%81%a7%e6%9c%ac%e6%a3%9a% Bei e3% 82% 92% e4% bd% 9c% e3% 82% 8b /) hat dies nichts mit dem Programm zu tun und es scheint nirgendwo eine Nachfrage zu geben.

Schließlich

Der erste Qiita-Beitrag und der erste Adventskalender, die Zeit ist vom 1. Dezember bis zu meiner Verantwortung vergangen! !! Jeden Tag wurde die Aufregung von "Ah, es wird bald ..." zu einer sehr guten Motivation. Ohne dieses Ereignis wäre es bisher nicht beendet worden. Ich bin froh, dass ich teilnehmen konnte. Danke fürs Lesen.

Recommended Posts

Ich habe versucht, Python x Kivy de Kinoppy (Kii Kuniya Buchhandlungs-App) nachzuahmen.
Ich habe versucht, Python zu berühren (Installation)
Ich habe versucht, die Behandlung von Python-Ausnahmen zusammenzufassen
Ich habe versucht, PLSA in Python zu implementieren
Ich habe versucht, Permutation in Python zu implementieren
Wrangle x Python Buch Ich habe es versucht [2]
Ich habe versucht, PLSA in Python 2 zu implementieren
Python3-Standardeingabe habe ich versucht zusammenzufassen
Ich habe versucht, ADALINE in Python zu implementieren
Ich habe versucht, PPO in Python zu implementieren
Wrangle x Python Buch Ich habe es versucht [1]
[Python] Ich habe versucht, TF-IDF stetig zu berechnen
Ich habe versucht, Python zu berühren (grundlegende Syntax)
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Ich habe versucht, LLVM IR mit Python auszugeben
Ich habe versucht, TOPIC MODEL in Python zu implementieren
Ich habe versucht, die Herstellung von Sushi mit Python zu automatisieren
Ich habe versucht, eine selektive Sortierung in Python zu implementieren
Ich habe versucht, springende Bälle zu multiplizieren (gelegentlich x100).
Ich habe untersucht, wie der Arbeitsablauf mit Excel x Python optimiert werden kann
Ich habe untersucht, wie der Arbeitsablauf mit Excel x Python ④ optimiert werden kann
Ich habe versucht herauszufinden, wie der Arbeitsablauf mit Excel x Python optimiert werden kann
Ich habe untersucht, wie der Arbeitsablauf mit Excel x Python optimiert werden kann
Ich habe untersucht, wie der Arbeitsablauf mit Excel x Python optimiert werden kann
Ich habe versucht, mit Python (Mac OS X) eine Umgebung für maschinelles Lernen zu erstellen.
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Als ich versuchte, Python3 in Atom einzuführen, blieb ich stecken
Ich habe versucht zusammenzufassen, wie man Matplotlib von Python verwendet
Ich habe versucht, Mine Sweeper auf dem Terminal mit Python zu implementieren
Ich habe versucht, mit Blenders Python script_Part 01 zu beginnen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Fortsetzung ・ Ich habe versucht, Slackbot zu erstellen, nachdem ich Python3 studiert habe
Ich habe versucht, mit Blenders Python script_Part 02 zu beginnen
Ich habe versucht, Drakues Poker in Python zu implementieren
Ich habe versucht, künstliches Perzeptron mit Python zu implementieren
Ich habe versucht, GA (genetischer Algorithmus) in Python zu implementieren
[Python] Ich habe versucht, die Top 10 der Lidschatten grafisch darzustellen
Ich habe versucht zusammenzufassen, wie man Pandas von Python benutzt
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
[Python] Ich habe versucht, Json von Tintenfischring 2 zu bekommen
Ich habe versucht, mit Python auf Google Spread Sheets zuzugreifen
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Ich habe versucht, AOJs Integer-Theorie mit Python zu lösen
Ich habe Python> autopep8 ausprobiert
Ich habe versucht zu debuggen.
Ich habe Python> Decorator ausprobiert
Ich habe auch versucht, die Funktionsmonade und die Zustandsmonade mit dem Generator in Python nachzuahmen
Ich habe versucht, API list.csv mit Python aus swagger.yaml zu erstellen
Ich habe versucht, mit Python faker verschiedene "Dummy-Daten" zu erstellen
Ich habe verschiedene Methoden ausprobiert, um japanische Post mit Python zu senden
Ich habe jeden Tag 13 LeetCode ausprobiert. Roman to Integer (Python, Go)
Ich habe versucht, Pilze Pepper x IBM Bluemix Text to Speech
[Markov-Kette] Ich habe versucht, negative Emotionen in Python zu laden.
[Markov-Kette] Ich habe versucht, die Zitate in Python einzulesen.