为了账号安全,请及时绑定邮箱和手机立即绑定

动态改变矩形颜色

动态改变矩形颜色

白衣染霜花 2021-12-16 16:05:49
在下面的示例中,在 FloatLayout 的画布中绘制了两个矩形。目标是创建一个简单的像素艺术绘图应用程序,用户可以在其中绘制矩形并更改其颜色(例如鼠标下矩形的颜色),因此我无法在 kv 文件中创建这些矩形。所以在这个演示示例中,我只想更改鼠标下矩形的颜色。from kivy.app import Appfrom kivy.lang import Builderfrom kivy.properties import ListPropertyfrom kivy.graphics import Color, RectangleKV = """FloatLayout    size_hint: None, None    size: 512, 512    on_touch_down: app.test(*args[1].pos)"""class MyApp(App):    color = ListProperty((1,1,1,1))    def build(self):        self.root = Builder.load_string(KV)        self.init_rects()    def init_rects(self):        with self.root.canvas:            x,y = self.root.pos            w,h = self.root.size            Color(rgba=(1,1,1,1))            self.r1 = Rectangle(pos = (x,y), size= (w/2,h))            Color(rgba=(1,0,0,1))            self.r2 = Rectangle(pos = (w/2,y), size= (w/2,h))    def test(self, x,y):        if x< self.root.center_x:            print ('I need to color this rectangle (self.r1) to red')        else:            print ('I need to color this rectangle (self.r2) to white')MyApp().run()在这个例子中,我将矩形存储为 self.r1 和 self.r2(因为我认为我需要进一步更改它们的位置或大小)问题是我没有找到如何仅更改一种矩形颜色而不更改其他颜色的示例。我有一个愚蠢的解决方案(如下) - 每次都创建一个新的矩形。粗略地说,我想念类似的东西 Rectangle(rgba=...)在这种情况下,解决方案是什么?
查看完整描述

1 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

您可以更改Color而不是尝试更改Rectangle. 这是对您的代码的修改,演示了这一点:


from kivy.app import App

from kivy.lang import Builder

from kivy.properties import ListProperty

from kivy.graphics import Color, Rectangle


KV = """

FloatLayout

    size_hint: None, None

    size: 512, 512

    on_touch_down: app.test(*args[1].pos)

"""



class MyApp(App):


    color = ListProperty((1,1,1,1))


    def build(self):

        self.root = Builder.load_string(KV)


        self.init_rects()


    def init_rects(self):

        with self.root.canvas:

            x,y = self.root.pos

            w,h = self.root.size


            self.c1 = Color(rgba=(1,1,1,1))

            Rectangle(pos = (x,y), size= (w/2,h))

            self.c2 = Color(rgba=(1,0,0,1))

            Rectangle(pos = (w/2,y), size= (w/2,h))


    def test(self, x,y):

        if x< self.root.center_x:

            print ('I need to color this rectangle (self.r1) to red')

            self.c1.rgba = (1,0,0,1)

        else:

            print ('I need to color this rectangle (self.r2) to white')

            self.c2.rgba = (1,1,1,1)


MyApp().run()


查看完整回答
反对 回复 2021-12-16
  • 1 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号