[PYTHON] Eine Erweiterung von Kivys Mal-App

Einführung

Ich bin in den ersten Tag des Python-Adventskalenders 2016 gesprungen. Es ist der erste Tag, also sollte jeder es sehen ... http://qiita.com/advent-calendar/2016/python

Alles scheint eine Ameise zu sein, also spreche ich über Kivy. (Eine kleine alte Geschichte vor ungefähr 6 Monaten)

Erweitern Sie die Mal-App

Kivys Tutorial enthält ein Beispiel einer einfachen Mal-App. https://kivy.org/docs/tutorials/firstwidget.html Diese Mal-App ändert die Zeichnungsfarbe jedes Mal, wenn Sie zeichnen.

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

Selbst im Quellcode können Sie sehen, dass color = (random (), 1, 1) die Farbe jedes Mal zufällig setzt. Bei der Ausführung ist dies wie in der Abbildung unten dargestellt.

Ich wollte die Farbe jedoch trotzdem selbst ändern, deshalb habe ich sie ein wenig erweitert. Kivy hat ein ColorPicker-Widget, das experimentell ist, also werde ich es verwenden. https://kivy.org/docs/api-kivy.uix.colorpicker.html

Übrigens, dieser Typ

Ich habe das Programm wie folgt umgeschrieben und Kv als Slapstick geschrieben.

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 wurde in Kv verwendet. Wie man es benutzt ist so.

<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

Ausführungsergebnis wie folgt

Die Farbe hat sich sicher geändert. Es ist eine gute Erinnerung, dass ich mit wenig Informationen über ColorPicker zu kämpfen hatte.

Der Quellcode ist auf Github. https://github.com/pyKy/Kivy-studies/tree/master/5th

Das ist alles über Kivy. Ich möchte ein bisschen mehr tun ...

Recommended Posts

Eine Erweiterung von Kivys Mal-App
Erstellen Sie eine App, die LINE jeden Morgen über das Wetter informiert