• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

R语言键盘和鼠标事件

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大。

R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器。随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长。现在已不仅仅是统计领域,教育,银行,电商,互联网….都在使用R语言。

要成为有理想的极客,我们不能停留在语法上,要掌握牢固的数学,概率,统计知识,同时还要有创新精神,把R语言发挥到各个领域。让我们一起动起来吧,开始R的极客理想。

关于作者:

转载请注明出处:
http://blog.fens.me/r-keyboard-mouse/

前言

在使用R语言的过程中,很多的技术点会被我们的忽略,这些经常被忽略的技术点大都和数据无关。但反过来讲,如果你能掌握这些技术点,你开发R语言应用会让人觉得Amazing!

本文我们就来聊一下R语言的键盘和鼠标事件。

目录

  1. R语言图形事件
  2. 图形事件API
  3. 键盘事件
  4. 鼠标事件

1. R语言图形事件

R语言中,应用最广的一类功能是画图,我们会经常使用R语言作图的API,像plot(),barplot(),points(),lines()等。每次调用plot()函数,R运行时环境都会启动一个新的图形设备(Graphics Device)。这个新打开的图形设备,除了会显示我们的定义的图形,还内置了一套事件管理器,可以监听键盘和鼠标事件,实现与图形设备的通信。

这个事件管理器在grDevices包中定义,并作为当前环境的父环境应用于用户环境空间中,关于环境空间的解释,请参考文章,http://blog.fens.me/r-environments/

试想一下,如果画图程序可以实现与鼠标和键盘通信,那么静态图片也就可以与用户进行交互了。掌握这个功能,R语言将不仅仅用于离线分析,还可以用来做时时应用,聊天工具或者是游戏。

接下来,就让我们开始了解R语言的图形事件API。

2. 图形事件API

图形事件API函数只有4个:

  • setGraphicsEventHandlers, 注册图形事件,包括键盘事件和鼠标事件(按下,释放,移动)。
  • getGraphicsEvent, 启动图形事件监听器,开始监听。
  • setGraphicsEventEnv, 设置图形设备和环境空间,默认为当前图形设备和当前环境空间。
  • getGraphicsEventEnv, 获取图形设备,默认为当前图形设备。

要在图形设备中接受鼠标和键盘事件,我们就需要通过setGraphicsEventHandlers()函数,把键盘和鼠标事件注册到图形设备中。

我们首先,看一下这个函数的定义。


> setGraphicsEventHandlers
function (which = dev.cur(), ...)
setGraphicsEventEnv(which, as.environment(list(...)))
<bytecode: 0x000000000b321d20>
<environment: namespace:grDevices>

通过定义我们只能看到 setGraphicsEventHandlers() 又调用了setGraphicsEventEnv(),用来设置图形设备,而setGraphicsEventHandlers()的参数都用“…”隐藏了。

接下来,我们再查看 getGraphicsEvent()函数的定义。我可以发现getGraphicsEvent()函数的参数可用于事件绑定,并且 getGraphicsEvent()的参数,实际上是用来传给setGraphicsEventHandlers()函数的。


> getGraphicsEvent
function (prompt = "Waiting for input", onMouseDown = NULL, onMouseMove = NULL,
    onMouseUp = NULL, onKeybd = NULL, consolePrompt = prompt)
{
    if (!interactive())
        return(NULL)
    if (!missing(prompt) || !missing(onMouseDown) || !missing(onMouseMove) ||
        !missing(onMouseUp) || !missing(onKeybd)) {
        setGraphicsEventHandlers(prompt = prompt, onMouseDown = onMouseDown,
            onMouseMove = onMouseMove, onMouseUp = onMouseUp,
            onKeybd = onKeybd)
    }
    .External2(C_getGraphicsEvent, consolePrompt)
}
<bytecode: 0x0000000005c4bd40>
<environment: namespace:grDevices>

参数说明:

  • prompt, 文字提示
  • consolePrompt, 在终端中的文字提示
  • onMouseDown, 鼠标事件,按下鼠标按键
  • onMouseUp, 鼠标事件,释放鼠标按键
  • onMouseMove, 鼠标事件,鼠标移动
  • onKeybd, 键盘事件,按下键盘

这样,通过getGraphicsEvent()函数的封装,我们可以绑定鼠标事件和键盘事件的操作了。

3. 键盘事件

说完知识点和API,下面我们就要动手写点程序了。

系统环境:

  • Win7 64bit
  • R: 3.0.1 x86_64-w64-mingw32/x64 b4bit

先做一个键盘事件的小程序,要求:

  • 1. 利用R语言画图,根据键盘输入显示对应的文字。
  • 2. 每按一下键盘,输出一个字母在屏幕上面。
  • 3. 按ctrl+c时,停止键盘事件。

左边为R语言程序后台,每次键盘输入,打印一行日志,右边图形设置中间的文字会跟着变化。

注:程序不能在RStudio中运行。

代码现实如下:


# 字母工具
letter

实现代码还是比较简单地。接下来,我们加上鼠标的事件,实现一个稍微复杂点的例子。

4. 鼠标事件

R语言中,图形设备的鼠标事件,包括3种类型: 鼠标移动, 鼠标按下(左键,右键,滚轮),鼠标释放。

我们设计一个应用,要求:

  • 1. 利用R语言画图,根据鼠标事件指定图形的位置和形状。
  • 2. 每移动一下鼠标,左下角输出鼠标所在的坐标,同时一个默认的图形随鼠标移动。
  • 3. 当鼠标按下时,会在当前坐标出现一个图形,左键对应正方形,滚轮对应用圆形,右键对应三角形。
  • 4. 按q时,停止监听事件。

代码现实如下:


mouse 

通过对R语言图形设备的事件监控,我们就可以轻松现实鼠标和键盘与程序的交互了,是不是很有意思呢。!!下一篇文章,让我们来动手做个游戏吧。

转载请注明出处:
http://blog.fens.me/r-keyboard-mouse/

This entry was posted in R语言实践


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
R语言 random forests out-of-bag prediction发布时间:2022-07-18
下一篇:
R语言运算符发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap