代码之家  ›  专栏  ›  技术社区  ›  jasan

Kivy:重画屏幕

  •  1
  • jasan  · 技术社区  · 4 年前

    我的脚本在内存中绘制图像,她的内容显示在屏幕上。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()
    
    0 回复  |  直到 4 年前