1. from kivy.app import App
  2. from kivy.graphics import Line, Color # 引入绘图线条,颜色
  3. from kivy.uix.widget import Widget # 引入控件
  4. from kivy.lang import Builder
  5. from kivy.utils import get_color_from_hex
  6.  
  7. Builder.load_string("""
  8. #:import C kivy.utils.get_color_from_hex
  9. <DrawCanvasWidget>:
  10. canvas.before:
  11. # 最下面纸的颜色
  12. Color:
  13. rgba:[1,1,1,1]
  14. # 形状
  15. Rectangle:
  16. # 位置
  17. pos:self.pos
  18. # 大小
  19. size:self.size
  20. Button:
  21. background_color:C('#FF0000')
  22. text:'1'
  23.  
  24. """)
  25.  
  26. # 布局类
  27. class DrawCanvasWidget(Widget):
  28. def __init__(self, **kwargs):
  29. super().__init__(**kwargs)
  30. # 1.设置默认颜色,在画布中加入颜色 16进制写法 # 画笔的颜色
  31. new_color = get_color_from_hex('#FF0000')
  32. self.canvas.add(Color(*new_color))
  33. # 1.设置默认颜色,在画布中加入颜色 十进制写法传入0到1的浮点数
  34. # self.canvas.add(Color(rgb=[0,0,0]))
  35.  
  36. self.line_width = 1 # 线宽
  37.  
  38. # 触摸显示轨迹
  39. def on_touch_down(self, touch):
  40. if Widget.on_touch_down(self,touch):
  41. return
  42.  
  43. with self.canvas:
  44.  
  45. touch.ud['current_line'] = Line(points=(touch.x,touch.y),width=self.line_width)
  46.  
  47. # 连线
  48. def on_touch_move(self, touch):
  49. if 'current_line' in touch.ud:
  50. touch.ud['current_line'].points += (touch.x,touch.y)
  51.  
  52. # 应用类
  53. class PaintApp(App):
  54. def build(self):
  55. self.draw_canvas_widget = DrawCanvasWidget()
  56. return self.draw_canvas_widget
  57.  
  58. if __name__ == '__main__':
  59.  
  60. PaintApp().run()

kivy画板的更多相关文章

  1. Kivy 中文教程 实例入门 简易画板 (Simple Paint App):1. 自定义窗口部件 (widget)

    1. 框架代码 用 PyCharm 新建一个名为 SimplePaintApp 的项目,然后新建一个名为 simple_paint_app.py 的 Python 源文件, 在代码编辑器中,输入以下框 ...

  2. Kivy 中文教程 实例入门 简易画板 (Simple Paint App):3. 随机颜色及清除按钮

    1. 随机颜色 通过前面的教程,咪博士已经带大家实现了画板的绘图功能.但是,现在画板只能画出黄色的图案,还十分单调,接下来咪博士就教大家,如何使用随机颜色,让画板变得五彩斑斓. 改进后的代码如下: f ...

  3. Kivy 中文教程 实例入门 简易画板 (Simple Paint App):2. 实现绘图功能

    1. 理解 kivy 坐标系统 上一节中,咪博士带大家实现了画板程序的基础框架,以及一个基本的自定义窗口部件(widget).在上一节的末尾,咪博士留了一道关于 kivy 坐标系统的思考题给大家.通过 ...

  4. Kivy 中文教程 实例入门 简易画板 (Simple Paint App):0. 项目简介 & 成果展示

    本教程咪博士将带领大家学习创建自己的窗口部件 (widget).最终,我们完成的作品是一个简易的画板程序. 当用 kivy 创建应用时,我们需要仔细思考以下 3 个问题: 我们创建的应用需要处理什么数 ...

  5. 用kivy学习制作简易调色画板app

    制作一款简易的调色画板,要用到的知识:页面布局.ToggleButton.ToggleButtonBehavior.get_color_from_hex(兼容十六进制编码颜色):功能上要可以选择颜色, ...

  6. 『Python Kivy』Kivy模板语言KV说明

    语言概念 KV语言允许你以声明的方式创建控件树,以及绑定控件属性到其他的控件或使用一种自然的方式进行回调. 它允许非常快速并灵活的改变你的UI. 它还可以让你的应用程序与应用程序的界面进行分隔. 如何 ...

  7. 『Python Kivy』官方乒乓球游戏示例解析

    本篇文章用于对Kivy框架官方所给出的一个「乒乓球」小游戏的源码进行简单地解析.我会尽可能的将方方面面的内容都说清楚.在文章的最下方为官方所给出的这个小游戏的教程以及游戏源码. 由于篇幅所限,本文只简 ...

  8. 使用HTML5的cavas实现的一个画板

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <meta http-e ...

  9. iOS: 为画板App增加 Undo/Redo(撤销/重做)操作

    这个随笔的内容以上一个随笔为基础,(在iOS中实现一个简单的画板),上一个随笔实现了一个简单的画板:   今天我们要为这个画板增加Undo/Redo操作,当画错了一笔,可以撤销它,或者撤销之后后悔了, ...

随机推荐

  1. [考试总结]noip模拟39

    不写那么多没用的了 开题就发现 \(T4\) 原题, \(T1\) 大水题. 然后发现 \(T4\) 忘了.... 不扯了 打地鼠 大水题,我代码都不想放... 算了,还是放一下吧.. #includ ...

  2. appnium显式等待机制

    强制等待: sleep不推荐全局隐式等待 全局隐式等待: 在服务端等待 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); ...

  3. IKEv2协议协商流程: (IKE-SA-INIT 交换)第二包

    IKEv2协议协商流程: (IKE-SA-INIT 交换)第二包 文章目录 IKEv2协议协商流程: (IKE-SA-INIT 交换)第二包 1. IKEv2 协商总体框架 2. 第二包流程图 3. ...

  4. CSS001. 纯CSS实现瀑布流(纵向排序)

    通过 Multi-columns 相关的属性 column-count.column-gap 配合 break-inside 来实现瀑布流布局. 首先对包裹图片的盒子增加样式,column-count ...

  5. Vite详解

    vite 目录 一.推荐两个插件插件 Volar Vue 3 Snippets 二.vite简介 优势分析 浏览器支持 三.vite搭建vue3.x项目 1.创建项目 2.集成Vue-Router 3 ...

  6. java线程day-01

    综述:下面写的是我学习java线程时做的一些笔记和查阅的一些资料总结而成.大多以问答的形式出现. 一.什么是线程? 答:线程是一个轻量级的进程,现在操作系统中一个基本的调度单位,而且线程是彼此独立执行 ...

  7. phpstoem破解

    https://blog.csdn.net/voke_/article/details/78794567

  8. cordova 打包 守护进程无法启动

    方案 1 : 添加环境变量 _JAVA_OPTIONS = -Xmx512M 2: 在新建的 系统变量里 变量名   _JAVA_OPTIONS 变量值   -Djava.net.preferIPv4 ...

  9. 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视GCC编译全过程 | 百篇博客分析OpenHarmony源码| v57.01

    百篇博客系列篇.本篇为: v57.xx 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视编译全过程 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙 ...

  10. Redis核心原理与实践--散列类型与字典结构实现原理

    Redis散列类型可以存储一组无序的键值对,它特别适用于存储一个对象数据. > HSET fruit name apple price 7.6 origin china 3 > HGET ...