Kivy: Redrawing screen

Viewed 18

My script draws image in memory and her contents is showed on screen. Buton draws red rectangle and using slider draws green rectancle. Script is lunched by button OK. After using of slider is new rectangle saved in file TestImage.png, but screen is not redrawing. Where is problem? Cann you help me?

from kivy.core.window import Window
from kivy.app import App
from kivy.graphics import Color
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.button import Button
from kivy.uix.image import Image as ImageKv
from kivy.uix.slider import Slider

from PIL import  Image, ImageDraw


class View():

    def view_image(self, size, pos, canvas, filename):

        with canvas:

            Color(0, 1, 0, 1)  # green; colors range from 0-1 not 0-255
            rect = ImageKv(source=filename,pos=pos, size=size )

        return

class MainApp(App):

    def OnAzmSliderValueChange(self, instance,value):

        if self.image != None:

            self.photo.polygon(self.polygon, fill = 'green')
            self.image.save(self.img_name)

            self.view.view_image(self.size, self.pos, self.root.canvas, self.img_name)

        return

    def build(self):
        self.image = None
        self.img_name = "TestImage.png"

        self.img_h = 2000
        self.img_w = 3000

        (dim_x, dim_y) = Window.size

        self.pos = (0, int(dim_y*0.1))
        self.size = (int(dim_x * 0.9),int(dim_y*0.7))

        x_center = dim_x/2
        y_center = dim_y/2

        self.polygon = [x_center - dim_x/2, y_center - dim_y/2,
                        x_center - dim_x/2, y_center + dim_y/2, \
                        x_center + dim_x/2, y_center + dim_y/2, \
                        x_center + dim_x/2, y_center - dim_y/2]

        root = RelativeLayout(size =(dim_x, dim_y))

        slider_hor = Slider(min= 0, max=360, step = 10, value = 0, orientation='horizontal', size_hint = (0.9, 0.1), pos = (0,int(dim_y*4/5.0)))
        root.add_widget(slider_hor)
        slider_hor.bind(value=self.OnAzmSliderValueChange)

        bt_ready = Button(text = 'OK', pos = (0, 0), size_hint = (1,0.1), on_press = self.cmd_ok)
        root.add_widget(bt_ready)

        self.root = root
        return root


    def cmd_ok(self, instance):

        self.image = Image.new("RGB", (self.img_w, self.img_h), 'yellow')
        self.photo = ImageDraw.Draw(self.image)

        self.photo.polygon(self.polygon, fill = 'red')
        self.image.save(self.img_name)

        self.view = View()
        self.view.view_image(self.size, self.pos, self.root.canvas, self.img_name)
        return



if __name__ == '__main__':
    MainApp().run()
0 Answers
Related