《Python+Kivy(App开发)从入门到实践》自学笔记:基本图形绘制——动手实践——画板——按钮边框

章节知识点总揽

3.5.4 按钮边框

        给当前选中的按钮添加特殊样式。

        实例:为画板按钮添加边框

        在main.py文件内引入ToggleButton,并添加一个继承类ToggleButton类,在该类下定一个方法用来添加边框样式,具体代码如下:

from kivy.uix.behaviors import ToggleButtonBehavior
from kivy.uix.togglebutton import ToggleButton
 

class FrameToggleButton(ToggleButton):
    #当前按钮添加边框
    def do_press(self):
        #点击改变状态
        if self.state == 'normal':
            ToggleButtonBehavior.do_press(self)

        由于.py添加了一个中间类FrameToggleButton,所以在.kv文件内提取出的两个公共属性中就不需要使用原生的ToggleButton属性,而替换为这里自定义的FrameToggleButton属性即可,然后设置background_normal和background_down两个属性为需要显示样式的图片,具体代码如下:

图片:

        52d941d0c77b44839a91c45622fc72e2.png

        1b6b962930ae439c815c984bf3149bb6.png

         paint.kv文件添加以下代码: 

<BottomColorButton@FrameToggleButton>:
	group:'color'
	background_normal:'01.png'
	background_down:'02.png'
	border:(3,3,3,3)
	on_release:app.canvas_widget.change_color(self.background_color)

<LineWidthButton@FrameToggleButton>:
	group:'line_width'
	color:C('#2c3e50')
	background_color:C('#ecf0f1')
	background_normal:'01.png'
	background_down:'02.png'
	border:(3,3,3,3)
	on_release:app.canvas_widget.change_line_width(self.text)

        至此,所有代码如下所示:

        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
from kivy.uix.behaviors import ToggleButtonBehavior
from kivy.uix.togglebutton import ToggleButton
 
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))

    def change_line_width(self,line_width='Normal'):
        #线宽
        self.line_width = {'Thin':1,'Normal':2,'Thick':4}[line_width]

class FrameToggleButton(ToggleButton):
    #当前按钮添加边框
    def do_press(self):
        #点击改变状态
        if self.state == 'normal':
            ToggleButtonBehavior.do_press(self)
 
class PaintApp(App):
    def build(self):
        self.canvas_widget = DrawCanvasWidget()
        return self.canvas_widget
 
 
if __name__ == '__main__':
    PaintApp().run()

        paint.kv文件内容如下:

#: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)
 
<LineWidthButton@ToggleButton>:
	group:'line_width'
	color:C('#2c3e50')
	backgroud_color:C('#ecf0f1')
	backgroud_normal:''
	backgroud_down:''
	border:(3,3,3,3)
	on_release:app.canvas_widget.change_line_width(self.text)

<BottomColorButton@FrameToggleButton>:
	group:'color'
	background_normal:'01.png'
	background_down:'02.png'
	border:(3,3,3,3)
	on_release:app.canvas_widget.change_color(self.background_color)

<LineWidthButton@FrameToggleButton>:
	group:'line_width'
	color:C('#2c3e50')
	background_color:C('#ecf0f1')
	background_normal:'01.png'
	background_down:'02.png'
	border:(3,3,3,3)
	on_release:app.canvas_widget.change_line_width(self.text)

<DrawCanvasWidget>:
	canvas.before:
		Color:
			rgba:[1,1,1,1]
		Rectangle:
			pos:self.pos
			size:self.size

	BoxLayout:
		orientataion:'horizontal'
		padding:2
		spacing:2
		x:0
		top:root.top
		size_hint:None,None
		size:280,44

		LineWidthButton:
			text:'Thin'
		LineWidthButton:
			text:'Normal'
			state:'down'
		LineWidthButton:
			text:'Thick'

<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文件后,选中的按钮变成粉色,未选中的按钮为黄色。结果如下图:

8aa88870d93545a1adca7b327b3e75a4.png

上一篇:基本图形绘制——动手实践——画板——设置线宽

下一篇:基本图形绘制——动手实践——画板——清屏

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静候光阴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值