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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。