J'ai essayé d'imiter Python x Kivy de Kinoppy (application de la librairie Kii Kuniya)

Cet article est le 14e jour du Calendrier de l'Avent pour le développement personnel 2019. Et c'est le premier message de Qiita. Début.

Je crée une application Windows en utilisant un framework appelé Python x Kivy.

Contexte

  1. J'ai préparé un livre papier et en ai fait un PDF. Rafraîchissant! ―― Maintenant, lisons sur iPad

Kinoppy (Kii Kuniya Bookstore App) est une très bonne application et je la recommande.

Aperçu de l'application

Il dispose d'une bibliothèque et d'une fonction de visualisation PDF. pdfapp2-min.gif

Environnement de développement

AnacondaNavigator VSCode Python3.7 Kivy1.11

Bibliothèque utilisée, etc.

Il y en a beaucoup qui dépendent trop des autres, mais ceux que j'utilise principalement sont les suivants. Rendu PDF: pdf2image Fichier de configuration: ruamel.yaml Polices d'icônes: iconfonts

Site très utile

Kinoppy Kivy stackoverflow Bâtiment principal du blog Arakawa Ray Et Qiita:Kivy

Todo C'est assez profond et médium, mais je vise ce qui suit. loin. ..

Code source etc.

Les deux codes sources Kivy suivants sont extraits et présentés.

  1. Scatter les vignettes par glisser-déposer --Réalisation de la droite → gauche de Sleider

1. Scatter les vignettes par glisser-déposer

Saisissez la vignette (l'image affichée sur l'étagère) pendant quelques secondes, puis faites-la glisser et déposez-la pour ajouter de la couleur au cadre de l'image. Si vous le relâchez avant d'entrer par glisser-déposer, il sera considéré comme un clic normal et passera à la visionneuse.

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)
        #Horloge ici.schedule_Vous ne pouvez pas redimensionner sans une fois
        Clock.schedule_once(self.drag_after_init)

    def drag_after_init(self, dt):
        self.size_hint = None,None
        self.size = self.image.size
        #Créez uniquement le cadre de l'image pour le glisser-déposer ici
        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):
        #Lorsque vous le saisissez, rendez le cadre de l'image gris.
        if self.state == 'grabed':
            self.color.rgba = (0.5,0.5,0.5,1)
        #Lorsque vous le relâchez, remettez-le en place.
        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':
                    #Transition vers le spectateur
                    app= App.get_running_app()
                    app.root.chgdisp_viewer(self.image_name)
            else:
                #Depuis sa suppression, l'alignement des vignettes
                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. Réalisation de Sleider droite → gauche

L'inconvénient de PDF Viewer à l'étranger est qu'il ne prend pas en charge l'écriture verticale (droite → gauche). Le curseur de Kivy peut être de gauche à droite (de bas en haut), mais il n'y a pas de réglage de droite à gauche. Je voulais aussi le nombre de pages lors du glissement, alors j'en ai fait une partie. La source est téléchargée sur Github. J'ai appris à personnaliser les pièces standard de cette manière. S'il vous plaît voir la source si vous le souhaitez.

Example.gif

3. (Bonus) Comment faire une étagère

Je n'avais pas une bonne image de bibliothèque, alors j'en ai fait une. C'est l'image. shelf2.png

Comment créer [Mon blog ici](https://flat-kids.net/2019/10/06/inkscape0-92-4%e3%81%a7%e6%9c%ac%e6%a3%9a% À e3% 82% 92% e4% bd% 9c% e3% 82% 8b /), cela n'a rien à voir avec le programme et il ne semble y avoir aucune demande nulle part.

finalement

Le premier post Qiita et le premier calendrier de l'Avent, il est trop tôt à partir du 1er décembre à ma charge! !! Chaque jour, l'excitation du "Ah, ça va tourner ..." est devenue une très bonne motivation. Sans cet événement, cela n'aurait pas été terminé jusqu'à présent. Je suis content d'avoir pu participer. Merci pour la lecture.

Recommended Posts

J'ai essayé d'imiter Python x Kivy de Kinoppy (application de la librairie Kii Kuniya)
J'ai essayé de toucher Python (installation)
J'ai essayé de résumer la gestion des exceptions Python
J'ai essayé d'implémenter PLSA en Python
J'ai essayé d'implémenter la permutation en Python
Livre Wrangle x Python Je l'ai essayé [2]
J'ai essayé d'implémenter PLSA dans Python 2
Entrée standard Python3 que j'ai essayé de résumer
J'ai essayé d'implémenter ADALINE en Python
J'ai essayé d'implémenter PPO en Python
Livre Wrangle x Python Je l'ai essayé [1]
[Python] J'ai essayé de calculer TF-IDF régulièrement
J'ai essayé de toucher Python (syntaxe de base)
J'ai essayé d'obtenir des données CloudWatch avec Python
J'ai essayé de sortir LLVM IR avec Python
J'ai essayé d'implémenter TOPIC MODEL en Python
J'ai essayé d'automatiser la fabrication des sushis avec python
J'ai essayé d'implémenter le tri sélectif en python
J'ai essayé de multiplier les balles rebondissantes (parfois x100)
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ②
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ④
J'ai essayé de savoir comment rationaliser le flux de travail avec Excel x Python ⑤
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ①
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ③
J'ai essayé de créer un environnement d'apprentissage automatique avec Python (Mac OS X)
J'ai essayé de représenter graphiquement les packages installés en Python
Quand j'ai essayé d'introduire python3 dans atom, je suis resté coincé
J'ai essayé de résumer comment utiliser matplotlib de python
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
J'ai essayé de démarrer avec le script python de blender_Part 01
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé d'implémenter un pseudo pachislot en Python
Suite ・ J'ai essayé de créer Slackbot après avoir étudié Python3
J'ai essayé de démarrer avec le script python de blender_Partie 02
J'ai essayé d'implémenter le poker de Drakue en Python
J'ai essayé d'implémenter le perceptron artificiel avec python
J'ai essayé d'implémenter GA (algorithme génétique) en Python
[Python] J'ai essayé de représenter graphiquement le top 10 des ombres à paupières
J'ai essayé de résumer comment utiliser les pandas de python
J'ai essayé de résoudre le problème avec Python Vol.1
[Python] J'ai essayé d'obtenir Json de squid ring 2
J'ai essayé d'accéder aux feuilles de calcul Google en utilisant Python
J'ai essayé de résumer les opérations de chaîne de Python
J'ai essayé de résoudre la théorie des nombres entiers d'AOJ avec Python
J'ai essayé Python> autopep8
J'ai essayé de déboguer.
J'ai essayé Python> décorateur
J'ai aussi essayé d'imiter la fonction monade et la monade d'état avec le générateur en Python
J'ai essayé de créer une API list.csv avec Python à partir de swagger.yaml
J'ai essayé de créer diverses "données factices" avec Python faker
J'ai essayé différentes méthodes pour envoyer du courrier japonais avec Python
J'ai essayé LeetCode tous les jours 13. Roman to Integer (Python, Go)
J'ai essayé les champignons Pepper x IBM Bluemix Text to Speech
[Chaîne de Markov] J'ai essayé de charger des émotions négatives dans Python.
[Chaîne de Markov] J'ai essayé de lire les citations en Python.