章节知识点总揽
3.5.2 设置颜色
Kivy中使用的颜色一般都是rgba(即red红色;green绿色;bule蓝色;alpha明度),在大多数情况下,使用具体的值比上255,会得到一个小数,但是有时想要设置颜色是采用十六进制表示的,为了节约时间,Kivy在utils包下提供了一个get_color_from_hex(),方法,使用时只需要传入一个十六进制的字符串即可,具体用法如下:
在.py文件内:
from kivy.utils import get_color_from_hex
get_color_from_hex('#19caad')
在.kv文件内:
#:import C kivy.utils.get_color_from_hex
Button
background_color:C('#19caad')
在DrawCanvasWidget类内,添加一个改变当前canvas画布颜色的方法(非canvas.before背景),具体代码如下:
def change_color(self,new_color):
#颜色改变
self.canvas.add(Color(*new_color))
在DrawCanvasWidget类的__init__()方法内,通过change_color()方法设置一个默认的颜色。
在.kv文件内通过点击不同的颜色出发点击事件,在调用change_color()方法传入十六进制字符串即可。
实例:设置画笔颜色
在paint.kv文件内,添加20各不同的颜色按钮,由于按钮的属性除了颜色外基本一致,所以可以把共同的属性提取出来,具体代码如下:
#:import C kivy.utils.get_color_from_hex
<ButtomColorButton@ToggleButton>:
group:'color'
background_normal:''
background_down:''
border:(3,3,3,3)
on_release:app.canvas_widget.change_color(self.background_color)
<DrawCanvasWidget>:
canvas.before:
Color:
rgba:[1,1,1,1]
Rectangle:
pos:self.pos
size:self.size
BoxLayout:
id:bottom_box
orientation:'horizontal'
padding:2
spacing:2
size:root.width,40
ButtomColorButton:
background_color:C('#19caad')
state:'down'
ButtomColorButton:
background_color:C('#8cc7d5')
ButtomColorButton:
background_color:C('#a0eee1')
ButtomColorButton:
background_color:C('#bee7e9')
ButtomColorButton:
background_color:C('#beedc7')
ButtomColorButton:
background_color:C('#d6d5b7')
ButtomColorButton:
background_color:C('#d1ba74')
ButtomColorButton:
background_color:C('#e6ceac')
ButtomColorButton:
background_color:C('#ecad9e')
ButtomColorButton:
background_color:C('#f4606c')
ButtomColorButton:
background_color:C('#3498db')
ButtomColorButton:
background_color:C('#1abc9c')
ButtomColorButton:
background_color:C('#2ecc71')
ButtomColorButton:
background_color:C('#f1c40f')
ButtomColorButton:
background_color:C('#e67e22')
ButtomColorButton:
background_color:C('#e74c3c')
ButtomColorButton:
background_color:C('#9b59b6')
ButtomColorButton:
background_color:C('#ecf0f1')
ButtomColorButton:
background_color:C('#95a5a6')
ButtomColorButton:
background_color:C('#000000')
使用之前main.py文件,其中添加上面讲到的change_color()方法,main.py更改后的代码如下:
from kivy.app import App
from kivy.graphics import Line,Color
from kivy.uix.widget import Widget
from kivy.utils import get_color_from_hex
class DrawCanvasWidget(Widget):
def __init__(self,**kwargs):
super().__init__(**kwargs)
#设置默认颜色
self.canvas.add(Color(rgb=[0,0,0]))
self.line_width = 2
def on_touch_down(self,touch):
#触摸显示轨迹
if Widget.on_touch_down(self,touch):
return
with self.canvas:
touch.ud['current_line'] = Line(points=(touch.x,touch.y),width=self.line_width)
def on_touch_move(self,touch):
#连线
if 'current_line' in touch.ud:
touch.ud['current_line'].points += (touch.x,touch.y)
def change_color(self,new_color):
#颜色改变
self.canvas.add(Color(*new_color))
class PaintApp(App):
def build(self):
self.canvas_widget = DrawCanvasWidget()
return self.canvas_widget
if __name__ == '__main__':
PaintApp().run()
运行结果如下图: