首页 > 解决方案 > 有没有合适的方法来改变 kivy 画布中的单个像素颜色?

问题描述

我试图制作存储矩形(大小=(1,1))和颜色对象的二维数组,所以它像kivy画布上的新画布一样工作,但是当它第一次创建矩形数组时它是滞后的,即使当我只放了 100x100 像素,这是代码:

import kivy
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.core.window import Window
from kivy.graphics import Color, Line, Point, Rectangle
from kivy.clock import Clock

class Touch(Widget):
    def __init__(self, **kwargs):
        super(Touch, self).__init__(**kwargs)
        self.new_window_size= None
        self.timer= 0
        Clock.schedule_interval(self.update_screen, 1/30)


    def update_screen(self, *args):
        with self.canvas:
            self.old_window_size= self.new_window_size
            self.new_window_size= Window.size
            if(self.old_window_size!= self.new_window_size):
                #i set 100x100 just to test
                self.w= 100 #self.new_window_size[0]
                self.h= 100 #self.new_window_size[1]
                self.color= []
                self.pixel= []
                for x in range(self.w):
                    temp_1= []
                    temp_2= []
                    for y in range(self.h):
                        print(x, y)
                        temp_1.append(Color(1, 1, 1, 1))
                        temp_2.append(Rectangle(pos= (x, y), size= (1, 1)))
                    self.color.append(temp_1)
                    self.pixel.append(temp_2)
            else:
                #update color
                self.color[self.timer][24].rgba= (0, 0, 0, 1)
                print(self.timer)
                self.timer+= 1

class MyApp(App):
    def build(self):
        return Touch()

MyApp().run()

有没有合适的方法来改变 kivy 画布类中的单个像素?

标签: pythonkivy

解决方案


要仅更改一个像素,您可以使用 a Rectanglewith size (1,1)。最容易使用kv

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.widget import Widget

class Touch(Widget):
    pass

kv = '''
<Touch>:
    canvas:
        Color:
            rgba: 1,0,0,1   # the new pixel color
        Rectangle:
            pos: 200, 200   # The pixel that you want to set
            size: 1,1   # indicate that just one pixel is changed
'''

class MyApp(App):
    def build(self):
        Builder.load_string(kv)
        return Touch()

MyApp().run()

推荐阅读