getGraphicsEvent
位于 grDevices
包(package)。 说明
该函数以鼠标或键盘事件的形式等待来自图形窗口的输入。
用法
getGraphicsEvent(prompt = "Waiting for input",
onMouseDown = NULL, onMouseMove = NULL,
onMouseUp = NULL, onKeybd = NULL,
onIdle = NULL,
consolePrompt = prompt)
setGraphicsEventHandlers(which = dev.cur(), ...)
getGraphicsEventEnv(which = dev.cur())
setGraphicsEventEnv(which = dev.cur(), env)
参数
prompt |
在图形窗口中向用户显示提示 |
onMouseDown |
响应鼠标点击的函数 |
onMouseMove |
响应鼠标移动的函数 |
onMouseUp |
响应鼠标按钮释放的函数 |
onKeybd |
响应按键的函数 |
onIdle |
当没有事件待处理时调用的函数 |
consolePrompt |
在控制台中向用户显示提示 |
which |
该调用适用于哪个图形设备? |
... |
包括要放置在事件环境中的处理程序的项目 |
env |
用作事件环境的环境 |
细节
这些函数允许用户从某些图形设备(目前仅windows()
,X11(type = "Xlib")
和X11(type = "cairo")
底座上的屏幕显示R)。可以安装事件处理程序来响应涉及鼠标或键盘的事件。
各函数的关系如下。如果前六个参数中的任何一个getGraphicsEvent
给出,然后它在调用中使用这些setGraphicsEventHandlers
替换当前设备中任何现有的处理程序。这是为了与 2.12.0 之前的版本兼容R版本。当前设置事件处理程序的常规方法是使用setGraphicsEventHandlers
或者setGraphicsEventEnv
在一个或多个图形设备上,然后使用getGraphicsEvent()
不带参数来检索事件数据。getGraphicsEventEnv()
可用于保存事件环境以供以后使用。
getGraphicsEvent
中的参数名称很特殊。处理事件时,图形系统将在事件环境中查找名为 onMouseDown
、 onMouseMove
、 onMouseUp
、 onKeybd
和 onIdle
的函数,并将它们用作事件处理程序。它将使用 prompt
作为图形设备上的标签。另外两个特殊名称是 which
,它将标识图形设备,以及 result
,其中最后一个事件处理程序的结果将在 getGraphicsEvent()
返回之前存储在其中。
鼠标事件处理程序应该是带有标题 function(buttons, x, y)
的函数。坐标 x
和 y
将被传递到设备独立坐标中的鼠标事件处理程序(即窗口的左下角是 (0,0)
,右上角是 (1,1)
)。 buttons
参数将是一个向量,列出事件发生时按下的按钮,其中 0 表示左侧,1 表示中间,2 表示右侧。
键盘事件处理程序应该是带有标题 function(key)
的函数。与按键相对应的单个元素字符向量将传递给此处理程序。 Shift 和其他修饰键将被处理,因此 shift-a
将作为 "A"
传递。以下特殊键也可以传递给处理程序:
-
控制键,作为
"Ctrl-A"
等传递。 -
导航键,作为其中之一传递
"Left", "Up", "Right", "Down", "PgUp", "PgDn", "End", "Home"
-
编辑键,作为
"Ins", "Del"
之一传递 -
函数键,作为
"F1", "F2", ...
之一传递
空闲事件处理程序onIdle
应该是一个不带参数的函数。如果函数未定义或 NULL
,那么 R 通常会调用一个系统函数,该函数(有效地)等待下一个事件出现在文件句柄上。否则,只要发现图形设备的事件队列为空,即处于无限循环中,就会调用空闲事件处理程序。此函数旨在允许动画响应用户输入,并且可能会占用 CPU 资源。目前,onIdle
仅针对X11()
设备实现。
请注意,不建议在空闲处理程序中调用 Sys.sleep()
- Sys.sleep()
会删除挂起的图形事件,以便允许用户在执行时移动、关闭或调整窗口大小。 Sys.sleep()
期间发生的鼠标和键盘事件等事件会丢失,并且当前不会触发通过 getGraphicsEvent
或 setGraphicsEventHandlers
注册的事件处理程序。
事件处理程序是标准 R 函数,并且将像从事件环境调用一样执行。
在交互式会话中,事件将被处理,直到
-
事件处理程序之一返回非
NULL
值,该值将作为getGraphicsEvent
的值返回,或 -
用户从控制台中断该函数。
值
以交互方式运行时,getGraphicsEvent
返回从事件处理程序之一返回的非 NULL
值。在非交互式会话中,getGraphicsEvent
将立即返回NULL
。如果用户关闭最后一个具有图形处理程序的窗口,它还将返回NULL
。
getGraphicsEventEnv
返回图形设备的当前事件环境,如果未设置,则返回 NULL
。
setGraphicsEventEnv
和 setGraphicsEventHandlers
返回图形设备的先前事件环境。
例子
# This currently only works on the Windows, X11(type = "Xlib"), and
# X11(type = "cairo") screen devices...
## Not run:
savepar <- par(ask = FALSE)
dragplot <- function(..., xlim = NULL, ylim = NULL, xaxs = "r", yaxs = "r") {
plot(..., xlim = xlim, ylim = ylim, xaxs = xaxs, yaxs = yaxs)
startx <- NULL
starty <- NULL
prevx <- NULL
prevy <- NULL
usr <- NULL
devset <- function()
if (dev.cur() != eventEnv$which) dev.set(eventEnv$which)
dragmousedown <- function(buttons, x, y) {
startx <<- x
starty <<- y
prevx <<- 0
prevy <<- 0
devset()
usr <<- par("usr")
eventEnv$onMouseMove <- dragmousemove
NULL
}
dragmousemove <- function(buttons, x, y) {
devset()
deltax <- diff(grconvertX(c(startx, x), "ndc", "user"))
deltay <- diff(grconvertY(c(starty, y), "ndc", "user"))
if (abs(deltax-prevx) + abs(deltay-prevy) > 0) {
plot(..., xlim = usr[1:2]-deltax, xaxs = "i",
ylim = usr[3:4]-deltay, yaxs = "i")
prevx <<- deltax
prevy <<- deltay
}
NULL
}
mouseup <- function(buttons, x, y) {
eventEnv$onMouseMove <- NULL
}
keydown <- function(key) {
if (key == "q") return(invisible(1))
eventEnv$onMouseMove <- NULL
NULL
}
setGraphicsEventHandlers(prompt = "Click and drag, hit q to quit",
onMouseDown = dragmousedown,
onMouseUp = mouseup,
onKeybd = keydown)
eventEnv <- getGraphicsEventEnv()
}
dragplot(rnorm(1000), rnorm(1000))
getGraphicsEvent()
par(savepar)
## End(Not run)
作者
Duncan Murdoch
相关用法
- R glyphInfo 说明一组排版字形
- R gray.colors 灰色调色板
- R grSoftVersion 图形软件的报告版本
- R gray 灰度等级规范
- R axisTicks 计算漂亮的轴刻度
- R hcl HCL 颜色规格
- R quartzFonts 石英字体
- R as.graphicsAnnot 强制图形注释对象
- R xyTable (x,y) 点的重数,例如,对于向日葵图
- R dev.interactive 当前图形设备是否具有交互性?
- R chull 计算一组点的凸包
- R convertColor 在色彩空间之间转换
- R X11Fonts X11 字体
- R plotmath R 中的数学注释
- R dev.capture 将设备输出捕获为光栅图像
- R dev.size 查找设备表面的尺寸
- R pdf.options 设置/查看 pdf 参数默认值的辅助函数
- R densCols 平滑密度图的颜色
- R windows Windows 图形设备
- R rgb RGB 颜色规格
- R check.options 设置带有一致性检查的选项
- R msgWindow 操纵窗口
- R dev.flush 保持或刷新屏幕图形设备上的输出
- R n2mfrow 根据绘图数计算默认“mfrow”
- R dev 控制多个设备
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Wait for a mouse or keyboard event from a graphics window。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。