[PYTHON] Une extension de l'application de peinture Kivy

introduction

J'ai sauté dans le premier jour du calendrier de l'avent Python 2016. C'est le premier jour donc tout le monde devrait le voir ... http://qiita.com/advent-calendar/2016/python

Tout semble être une fourmi, alors je parle de Kivy. (Une petite histoire il y a environ 6 mois)

Étendre l'application de peinture

Le tutoriel de Kivy a un exemple d'une application de peinture simple. https://kivy.org/docs/tutorials/firstwidget.html Cette application de peinture change la couleur du dessin à chaque fois que vous dessinez.

class MyPaintWidget(Widget):

    def on_touch_down(self, touch):
        color = (random(), 1, 1)
        with self.canvas:
            Color(*color, mode='hsv')
            d = 30.
            Ellipse(pos=(touch.x - d / 2, touch.y - d / 2), size=(d, d))
            touch.ud['line'] = Line(points=(touch.x, touch.y))

Même dans le code source, vous pouvez voir que color = (random (), 1, 1) met la couleur au hasard à chaque fois. Lorsqu'il est exécuté, il est comme indiqué dans l'image ci-dessous.

Cependant, je voulais quand même changer la couleur moi-même, alors je l'ai un peu élargie. Kivy a un widget ColorPicker, qui est expérimental, donc je vais l'utiliser. https://kivy.org/docs/api-kivy.uix.colorpicker.html

Au fait, ce gars

J'ai réécrit le programme comme suit et écrit Kv comme un slapstick.

main.py


#from random import random
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.popup import Popup
from kivy.uix.colorpicker import ColorPicker
from kivy.graphics import Color, Ellipse, Line

class ClearButton(Button):
    pass

class ColorChangeButton(Button):
    pass
        
class MyPopup(Popup):
    pass

class MyPaintWidget(Widget):
    color = [1, 1, 1, 1]
    def on_touch_down(self, touch):
        with self.canvas:
            Color(rgba=(self.color))
            d = 5
            Ellipse(pos=(touch.x - d / 2, touch.y - d / 2), size=(d, d))
            touch.ud['line'] = Line(pos=(touch.x, touch.y))

    def on_touch_move(self, touch):
        touch.ud['line'].points += [touch.x, touch.y]
    
    def clear_canvas(self,*largs):
        self.canvas.clear()
        
    def open_popup(self):
        popup = MyPopup()
        popup.open()

class MyPaintApp(App):
    def build(self):
        parent = Widget()
        self.painter = MyPaintWidget()
        clearbtn = ClearButton()
        colorbtn = ColorChangeButton()
        parent.add_widget(self.painter)
        parent.add_widget(colorbtn)
        parent.add_widget(clearbtn)
        return parent
    
if __name__ == '__main__':
    MyPaintApp().run()

mypaint.kv


<ClearButton>:
    Button:
        text: 'Clear'
        right: root.right
        top: root.top
        width: 100
        height: 100
        on_release: app.painter.canvas.clear()

<ColorChangeButton>:
    Button:
        text: 'Color'    
        right: root.right
        top: root.top
        width: 100
        height: 100
        on_release: app.painter.open_popup()
        
<MyPopup>:
    title: 'Color Select'
    size_hint: None, None
    size: 400, 400
    BoxLayout:
        orientation: 'vertical'
        ColorPicker:
            id: picker
            color: app.painter.color
            on_color: app.painter.color = self.color
            
        Button:
            size_hint_y: None
            height: 60
            text: 'Change'
            on_press: root.dismiss()
        

ColorPicker a été utilisé dans Kv. Comment l'utiliser, c'est comme ça.

<MyPopup>:
    title: 'Color Select'
    size_hint: None, None
    size: 400, 400
    BoxLayout:
        orientation: 'vertical'
        ColorPicker:
            id: picker
            color: app.painter.color
            on_color: app.painter.color = self.color

Résultat d'exécution comme celui-ci

La couleur a changé en toute sécurité. C'est un bon souvenir que j'ai eu du mal avec peu d'informations sur ColorPicker.

Le code source est sur github. https://github.com/pyKy/Kivy-studies/tree/master/5th

C'est tout à propos de Kivy. Je veux faire un peu plus ...

Recommended Posts

Une extension de l'application de peinture Kivy
Créez une application qui informe LINE de la météo tous les matins