我的脚本在内存中绘制图像,她的内容显示在屏幕上。Buton绘制红色矩形,使用滑块绘制绿色矩形。脚本由按钮确定。使用滑块后,新矩形保存在文件TestImage中。png,但屏幕未重画。问题出在哪里?你能帮我吗?
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()