【行空板教程】写字板
【行空板教程】写字板
前言
我们知道行空板有一块2.8寸的彩屏还一块触摸屏,不搞点事情总感觉浪费了,之前做了语音识别的教程,很多读者都用语音识别做了很多有趣的小项目,那么我就想能不能做一个手写输入法呢?这篇教程算是前期准备教程,我们如何运用行空板库已有的API来做一个写字板呢?好了,废话不多说了,就让开始本次的教程吧。
相关知识点
1、线 draw_line
语法:控件对象名 = GUI对象.draw_line(x0, y0, x1, y1, width, color, onclick)
- **返回值:**文字对象
- 输入参数:
- x0 : 起点横坐标
- y0 : 起点纵坐标
- x1 : 终点横坐标
- y1 : 终点纵坐标
- width : 线的粗细
- color : 线的颜色
- onclick : 当被点击时触发的回调函数
- 用法举例:
from unihiker import GUI #导入包
gui=GUI() #实例化GUI类
gui.draw_line(x0=10, y0=60, x1= 80, y1=60, width=5, color=(122,222,44), onclick=lambda: print("line clicked"))import time
while True:#增加等待,防止程序退出和卡住time.sleep(1)
2、鼠标坐标 on_mouse_move
语法:GUI对象.on_mouse_move(回调函数名)
- 返回值: 无
- 输入参数: 回调函数名
- 用法举例:
from unihiker import GUI #导入包
gui=GUI() #实例化GUI类
info_text = gui.draw_text(x=120, y=320, text='鼠标坐标',origin='bottom')def mouse_move(x, y):info_text.config(text="坐标:x={},y={}".format(x, y))print(x,y)
gui.on_mouse_move(mouse_move)import time
while True:#增加等待,防止程序退出和卡住time.sleep(1)
项目思路
在我们触控屏幕的时候,其实我们的鼠标会跟着我们的手指进行移动,这个是个适合会返回鼠标的(x,y)坐标,我们使用一个列表保存所有移动过的点,然后要画线的时候,循环遍历列表,依次画出列表中点到定点之间的线即可。把所有相邻两个点之间都画一条线,就能断断续续连成鼠标的痕迹了。
程序编写
1、写字板1.0
from unihiker import GUI #导入包
import timegui=GUI() #实例化GUI类
pos_xy = [] # 用来装鼠标的坐标。gui.on_a_click(lambda: line_clear()) # A键盘被按下 清屏所有gui对象和pox_xy列表中的数据
gui.on_b_click(lambda: pos_xy.clear()) # B按键被按下,清空pox_xy列表def line_clear():gui.clear()pos_xy.clear()def mouse_move(x, y):'''首先判断pos_xy列表中是不是至少有两个点了然后将pos_xy中第一个点赋值给point_start利用中间变量pos_tmp遍历整个pos_xy列表point_end = pos_tmp画point_start到point_end之间的线point_start = point_end这样,不断地将相邻两个点之间画线,就能留下鼠标移动轨迹了'''pos_xy.append([x,y])if len(pos_xy) > 1:point_start = pos_xy[0]for pos_tmp in pos_xy:point_end = pos_tmpgui.draw_line(x0=point_start[0],y0=point_start[1],x1=point_end[0],y1=point_end[1],width=2, color=(122,222,125))point_start = point_endgui.on_mouse_move(mouse_move) while True:#增加等待,防止程序退出和卡住time.sleep(1)
效果:
2、写字板2.0
从上面的效果,我们实现了写字的功能,但是我们写1后抬手准备写2,它就会默认把我们的1的尾部和2的头相连。那么我们如果解决呢?这里我看了行空板的库没有找到屏幕是否被按下的API,又或者是鼠标不被按下后无返回值。这里我主要是使用了time函数来标记。
具体程序如下:
from unihiker import GUI #导入包
import timegui=GUI() #实例化GUI类
pos_xy = [] # 用来装鼠标的坐标。
temp_time =0 gui.on_a_click(lambda: line_clear())
gui.on_b_click(lambda: pos_xy.clear())
def line_clear():gui.clear()pos_xy.clear()def mouse_move(x, y):global temp_timetemp_time = time.time()'''首先判断pos_xy列表中是不是至少有两个点了然后将pos_xy中第一个点赋值给point_start利用中间变量pos_tmp遍历整个pos_xy列表point_end = pos_tmp画point_start到point_end之间的线point_start = point_end这样,不断地将相邻两个点之间画线,就能留下鼠标移动轨迹了'''pos_xy.append([x,y])if len(pos_xy) > 1:point_start = pos_xy[0]for pos_tmp in pos_xy:point_end = pos_tmpgui.draw_line(x0=point_start[0],y0=point_start[1],x1=point_end[0],y1=point_end[1],width=2, color=(122,222,125))point_start = point_endgui.on_mouse_move(mouse_move) while True:#增加等待,防止程序退出和卡住time.sleep(1)if(time.time() - temp_time > 0.0001 ):pos_xy.clear()
效果:
注:目前字体与字体之间的连线,我目前还没有一个更好的办法DEBUG:尝试了两点坐标的偏差值来判断,
if( x-temp_x > 20 or y-temp_y >20):pos_xy.clear()
temp_x = x
temp_y = y
效果不佳,如果官方给一个屏幕是否被按下的API,上述问题就很轻松解决了
3、写字板3.0
from unihiker import GUI #导入包
import timegui=GUI() #实例化GUI类pos_xy = [] # 用来装鼠标的坐标。
temp_time =0
penColor="black"
#每个色块被点击,我们就改变线条的颜色
gui.fill_rect(x=0, y=0, w=40, h=30, color="green",onclick=lambda: changeColor("green"))
gui.fill_rect(x=40, y=0, w=40, h=30, color="red",onclick=lambda: changeColor("red"))
gui.fill_rect(x=80, y=0, w=40, h=30, color="blue",onclick=lambda: changeColor("blue"))
gui.fill_rect(x=120, y=0, w=40, h=30, color="black",onclick=lambda: changeColor("black"))
gui.fill_rect(x=160, y=0, w=40, h=30, color="orange",onclick=lambda: changeColor("orange"))
gui.fill_rect(x=200, y=0, w=40, h=30, color="pink",onclick=lambda: changeColor("pink"))gui.on_a_click(lambda: line_clear())
gui.on_b_click(lambda: pos_xy.clear())def changeColor(color):# 切换线条颜色global penColorpenColor = colorprint(penColor)def line_clear():# 清屏操作gui.clear()pos_xy.clear()gui.fill_rect(x=0, y=0, w=40, h=30, color="green",onclick=lambda: changeColor("green"))gui.fill_rect(x=40, y=0, w=40, h=30, color="red",onclick=lambda: changeColor("red"))gui.fill_rect(x=80, y=0, w=40, h=30, color="blue",onclick=lambda: changeColor("blue"))gui.fill_rect(x=120, y=0, w=40, h=30, color="black",onclick=lambda: changeColor("black"))gui.fill_rect(x=160, y=0, w=40, h=30, color="orange",onclick=lambda: changeColor("orange"))gui.fill_rect(x=200, y=0, w=40, h=30, color="pink",onclick=lambda: changeColor("pink"))def mouse_move(x, y):# 画线global temp_time,penColortemp_time = time.time()'''首先判断pos_xy列表中是不是至少有两个点了然后将pos_xy中第一个点赋值给point_start利用中间变量pos_tmp遍历整个pos_xy列表point_end = pos_tmp画point_start到point_end之间的线point_start = point_end这样,不断地将相邻两个点之间画线,就能留下鼠标移动轨迹了'''pos_xy.append([x,y])if len(pos_xy) > 1:point_start = pos_xy[0]for pos_tmp in pos_xy:point_end = pos_tmpline_text= gui.draw_line(x0=point_start[0],y0=point_start[1],x1=point_end[0],y1=point_end[1],width=4,color=penColor)point_start = point_endgui.on_mouse_move(mouse_move) while True:#增加等待,防止程序退出和卡住time.sleep(1)if(time.time() - temp_time > 0.000001 ):pos_xy.clear()
效果:
总结
enen~!本次【行空板教程】写字板到这里就结束了,里面有些功能的实现还不算太完美,如果读者有更好的办法,欢迎讨论。现在我们可以实现写字的功能了,那么距离我们手写输入法是不是更近了一步。【行空板教程】手写输入法 敬请期待,更多教程欢迎关注个人公众号:跟着hockel玩科创。
【行空板教程】写字板相关推荐
- 计算机系统写字板,什么是电脑写字板 电脑写字板使用方法
随着科技的不断进步,家家户户都有电脑,它也成了我们日常生活中最必不可少的组成,电脑写字板不知道您有没有听说过,今天我们就要来探究探究它,一起往下看吧! 什么是电脑写字板 电脑手写板,又叫手写板(手写绘 ...
- 编辑html的写字板,jQuery写字板插件
jSignature是一款jQuery写字板插件.jSignature基于HTML5 canvas,可以制作跨平台,支持移动手机的写字板效果. 使用方法 在页面中引入下面的文件. HTML结构 使用下 ...
- 【java毕业设计】基于java+swing的模拟写字板设计与实现(毕业论文+程序源码)——模拟写字板
基于java+swing的模拟写字板设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing的模拟写字板设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦.需要下载开题报 ...
- 基于java的模拟写字板系统设计与实现(项目报告+开题报告+答辩PPT+源代码+部署视频)
项目报告 基于Java的模拟写字板的设计与实现 目前,很多新的技术领域都涉及到了Java语言,Java语言是面向对象编程,并且涉及到网络.多线程等重要的基础知识,因此Java语言也是学习面向对象编程和 ...
- [计算机毕设]基于java的模拟写字板的设计与实现(项目报告+答辩PPT+源代码+数据库)
项目说明报告 基于Java的模拟写字板的设计与实现 目前,很多新的技术领域都涉及到了Java语言,Java语言是面向对象编程,并且涉及到网络.多线程等重要的基础知识,因此Java语言也是学习面向对象编 ...
- 【项目精选】基于Java的模拟写字板的设计与实现(视频+论文+源码)
点击下载源码 此系统是使用Java语言实现简易写字板程序,能够进行输入文字操作,并具有新建文件,打开文件,保存文件,退出,复制,粘贴,剪切,全选,撤销等多种基本功能.本系统结构如下: (1)菜单栏: ...
- 【全源码及文档】基于Java的模拟写字板的设计与实现
摘 要 目前,很多新的技术领域都涉及到了Java语言,Java语言是面向对象编程,并且涉及到网络.多线程等重要的基础知识,因此Java语言也是学习面向对象编程和网络编程的首选语言.此简易JAVA写字板 ...
- 蘑菇云「行空板Python入门教程」第七课:舒尔特方格小游戏
注意力是一切学习的根本,是大脑进行感知.学习.思维等认知活动的基本条件.然而,无论是孩子还是成年人,我们常常会因开小差.注意力无法集中而困扰.此时,找到一个合适的方法来训练我们的注意力势在必行. 舒尔 ...
- 蘑菇云「行空板Python入门教程」第六课:贪吃蛇小游戏
在很久很久以前,手机屏幕都还是黑白的年代,有一款叫做"贪吃蛇"的游戏风靡了大街小巷,在那分辨率极低的屏幕上,几条扭扭曲曲的弧线似乎穿越了整个童年. 这节课上,就让我们用行空板来实现 ...
最新文章
- 跟锦数学2017年04月
- 使用sqlmap直连数据库获取webshell
- Ibatis学习总结7--SqlMapClient 执行 SQL 语句
- 血压测量:很重要的事情!
- 亲测!这款耳机性价比堪比 AirPods
- 怎样将程序猿写出来的程序打包成安装包(最简单的)
- 把散乱的SQL赶出程序代码中
- LINUX安装7Zip
- 物联网边缘-物联网准入或接入安全防护产品及解决方案
- 软件测试 白盒测试用例设计方法动态 逻辑覆盖(语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖)基本路径测试法
- 利用实体类接收中国电信物联网平台推送的数据
- 30行Python代码爬取LOL全英雄皮肤
- web大作业介绍自己的家乡_中国10大乡村名鸭!快来看看自己家乡的鸭子是否上榜...
- WebService的四种客户端调用方式(基本)
- cmd命令重启服务器
- Kubernetes之Volumes
- 2D-2D:对极几何与三角测量
- Spring集成Hibernate5_03-HibernateDaoSupport
- 数据库 数据目录
- u8信息服务器,u8服务器的配置