四、编程向导(4.8图形)

作者: gthank | 来源:发表于2016-02-18 12:14 被阅读237次

    编程向导:4.8图形

    一、画布介绍

    部件绘画的表现使用画布来完成。你可以将它看作一个无限制的画板,或者一个绘画指令的集合。
    在你的画布中,你可以应用的指令有很多,但是最主要的两个是:

    • 上下文指令(context instructions)
    • 顶点指令(vertex instructions)

    上下文指令不画任何东西,但是它们改变顶点指令的结果。

    画布包含指令的两种子集合:canvas.before, canvas.after。这些指令在canvas前或后执行。这些指令直到用户访问时才创建。

    为了添加一个画布指令到部件,你需要使用画布上下文:

    class MyWidget(Widget):
        def __init__(self, **kwargs):
            super(MyWidget, self).__init__(**kwargs)
            with self.canvas:
                #为主画布添加你的指令
    
            with self.canvas.before:
                #渲染前执行
    
            with self.canvas.after:
                #渲染后执行
    

    二、上下文指令

    上下文指令操纵Opengl上下文。你可以旋转、转换、拉伸你的画布。你也可以附着一个材质或改变绘画的颜色。这是最常用的,但是其它也是很有用的,比如:

    with self.canvas.before:
        Color(1, 0, .4, mode='rgb')
    

    三、绘画指令

    绘画指令简单的包括画一条直线或一个多边形,复杂的包括贝塞尔曲线:

    with self.canvas:
        #画一条直线,使用默认的颜色
        Line(points=(x1, y1, x2, y2, x3, y3))
    
        #画一个半透明的红色的正方形
        Color(1, 0, 0, .5, mode='rgba')
        Rectangle(pos=self.pos, size=self.size)
    

    四、配置指令

    有时,你想更新或移除你的指令,根据你的需要可以使用不同的方式:
    你可以保持一个你的指令的引用并更新它们:

    class MyWidget(Widget):
        def __init__(self, **kwargs):
            super(MyWidget, self).__init__(**kwargs)
            with self.canvas:
                self.rect = Rectangle(pos=self.pos, size=self.size)
    
            self.bind(pos=self.update_rect)
            self.bind(size=self.update_rect)
    
        def update_rect(self, *args):
            self.rect.pos = self.pos
            self.rect.size = self.size
    

    或者你可以清理你的画布并启动刷新:

    class MyWidget(Widget):
        def __init__(self, **kwargs):
            super(MyWidget, self).__init__(**kwargs)
            self.draw_my_stuff()
    
            self.bind(pos=self.draw_my_stuff)
            self.bind(size=self.draw_my_stuff)
    
        def draw_my_stuff(self):
            self.canvas.clear()
    
            with self.canvas:
                self.rect = Rectangle(pos=self.pos, size=self.size)
    

    注意更新的指令被认为是最佳实践,因为它需要更少的开销和避免创建新的指令。

    下节预告:编程向导4.9Kv语言

    相关文章

      网友评论

        本文标题:四、编程向导(4.8图形)

        本文链接:https://www.haomeiwen.com/subject/rimmkttx.html