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