TclInterface
位於 tcltk
包(package)。 說明
這些函數和變量提供了之間的基本粘合R以及 Tcl 解釋器和 Tk GUI 工具包。 Tk 窗口可以通過以下方式表示R對象。 Tcl變量可以通過類的對象訪問tclVar
Tcl 對象的 C 級接口是通過類對象訪問的tclObj
.
用法
.Tcl(...)
.Tcl.objv(objv)
.Tcl.args(...)
.Tcl.args.objv(...)
.Tcl.callback(...)
.Tk.ID(win)
.Tk.newwin(ID)
.Tk.subwin(parent)
.TkRoot
.TkUp
tkdestroy(win)
is.tkwin(x)
tclvalue(x)
tclvalue(x) <- value
tclVar(init = "")
## S3 method for class 'tclVar'
as.character(x, ...)
## S3 method for class 'tclVar'
tclvalue(x)
## S3 replacement method for class 'tclVar'
tclvalue(x) <- value
tclArray()
## S3 method for class 'tclArray'
x[[...]]
## S3 replacement method for class 'tclArray'
x[[...]] <- value
## S3 method for class 'tclArray'
x$i
## S3 replacement method for class 'tclArray'
x$i <- value
## S3 method for class 'tclArray'
names(x)
## S3 method for class 'tclArray'
length(x)
tclObj(x)
tclObj(x) <- value
## S3 method for class 'tclVar'
tclObj(x)
## S3 replacement method for class 'tclVar'
tclObj(x) <- value
as.tclObj(x, drop = FALSE)
is.tclObj(x)
## S3 method for class 'tclObj'
as.character(x, ...)
## S3 method for class 'tclObj'
as.integer(x, ...)
## S3 method for class 'tclObj'
as.double(x, ...)
## S3 method for class 'tclObj'
as.logical(x, ...)
## S3 method for class 'tclObj'
as.raw(x, ...)
## S3 method for class 'tclObj'
tclvalue(x)
## Default S3 method:
tclvalue(x)
## Default S3 replacement method:
tclvalue(x) <- value
addTclPath(path = ".")
tclRequire(package, warn = TRUE)
tclVersion()
參數
objv |
Tcl 對象的命名向量 |
win |
窗口結構 |
x |
一個東西 |
i |
字符或(不帶引號的)名稱 |
drop |
合乎邏輯的。指示是否應將單元素向量製作為簡單的 Tcl 對象或長度為 1 的列表 |
value |
對於 |
ID |
窗口 ID |
parent |
成為結果窗口的父窗口的窗口 |
path |
包含 Tcl 包的目錄的路徑 |
package |
Tcl 包名稱 |
warn |
合乎邏輯的。如果沒有找到警告? |
... |
附加參數。見下文。 |
init |
初始化值 |
細節
其中許多函數並不適合一般用途,而是由創建和操作 Tk 小部件和 Tcl 對象的命令在內部使用。在最低級別,.Tcl
將命令作為文本字符串發送到 Tcl 解釋器,並將結果作為類 tclObj
的對象返回(見下文)。較新的變體 .Tcl.objv
接受 tclObj
對象命名列表形式的參數。
.Tcl.args
將 tag = value
對的 R 參數列表轉換為 Tcl -option value
樣式,從而實現兩種語言之間的簡單翻譯。要將沒有前置選項標誌的值發送到 Tcl,隻需使用未標記的參數。在極少數情況下,需要一個無法使用後續值 tag = NULL
的選項。大多數值隻是轉換為字符模式並插入命令字符串中,但窗口對象是使用其 ID 字符串傳遞的,回調是通過 .Tcl.callback
的結果傳遞的。隻需在前麵添加 -
即可將標簽轉換為選項標誌
.Tcl.args.objv
的用途與 .Tcl.args
類似,但會生成適合傳遞給 .Tcl.objv
的 tclObj
對象列表。列表的名稱由 .Tcl.objv
在內部轉換為 Tcl 選項樣式。
回調可以是原子回調處理者.Tcl.callback
或表達式。表達式被視為原子回調列表,但有以下異常:如果元素是名稱,則首先在調用者框架中對其進行計算,如果它是顯式函數定義,則同樣進行計算;這break
表達式直接翻譯為 Tcl 對應項。.Tcl.callback
皈依者R函數和對 Tcl 命令字符串的未評估調用。參數必須是函數閉包或模式對象"call"
其次是環境。第一種情況的返回值的形式為R_call
0x408b94d4
其中十六進製數是函數的內存地址。在第二種情況下,它將采用以下形式R_call_lang 0x8a95904 0x819bfd0
。對於表達式,會生成一係列相似項,並用分號分隔。.Tcl.args
通過將回調分配到相關的窗口環境中,采取特殊的預防措施來確保函數或調用將繼續存在於指定的地址(見下文)。
Tk 窗口表示為類的對象tkwin
這是包含一個的列表ID
場和一個env
字段是一個R環境,封閉在全局環境中。的值ID
字段與 Tk 窗口名稱相同。這env
環境包含一個parent
變量和一個num.subwin
多變的。如果窗口獲得子窗口和回調,它們將作為變量添加到環境中。.TkRoot
是 ID 為 "." 的頂部窗口;不顯示此窗口是為了避免通過窗口管理器控件關閉它的不良影響。這parent
變量未定義.TkRoot
.
.Tk.ID
提取窗口的 ID
,.Tk.newwin
創建具有給定 ID 的新窗口環境,.Tk.subwin
創建一個新窗口,該窗口是給定父窗口的子窗口。
.TkUp
是一個邏輯標誌,指示Tk widget係統是否處於活動狀態;如果是 FALSE
,則隻有 Tcl 解釋器可用。
tkdestroy
銷毀窗口並從其父窗口中刪除對窗口的引用。
is.tkwin
可用於測試給定對象是否為窗口環境。
tclVar
創建一個新的 Tcl 變量並將其初始化為 init
。創建類 tclVar
的 R 對象來表示它。在對象上使用 as.character
返回 Tcl 變量名稱。從 R 訪問 Tcl 變量是使用 tclvalue
函數完成的,該函數也可以發生在賦值的左側。如果 tclvalue
傳遞的參數不是 tclVar
對象,那麽它將假定它是顯式命名全局 Tcl 變量的字符串。 tclVar
創建的 Tcl 變量具有唯一的命名,並且當表示對象不再使用時,垃圾Collector會自動取消設置。
tclArray
創建一個新的 Tcl 數組並將其初始化為空數組。創建一個類 tclArray
並繼承自類 tclVar
的 R 對象來表示它。您可以使用 [[
或 $
進行索引來訪問 Tcl 數組的元素,這也允許替換形式。請注意,Tcl 數組本質上是關聯的,因此是無序的;使用數字索引 i
進行索引是指名稱為 as.character(i)
的元素。多個索引粘貼在一起並用逗號分隔以形成單個名稱。您可以分別使用 length
和 names
的方法查詢數組中的長度和名稱集;這些不能被有意義地設置,因此作業表單的存在隻是為了打印錯誤消息。
可以直接訪問 Tcl 的‘dual-ported’對象,從而避免對其字符串表示形式的解析和反解析。這是通過使用 tclObj
類的對象來實現的。可以使用 tclvalue
提取(但不能設置)此類對象的字符串表示形式,並使用標準強製轉換執行到 "character"
、 "double"
、 "integer"
、 "logical"
和 "raw"
模式向量的轉換函數 as.character
等。相反,可以使用 as.tclObj
轉換此類向量。對於由 drop
參數控製的長度為 1 的向量應該發生什麽,存在模糊性;在某些情況下,這種區別對 Tcl 很重要,盡管大多數情況下 Tcl 會同等對待它們。請注意,tclvalue
和 as.character
在字符串表示形式嵌入空格的對象上有所不同,有時首選前者,特別是當應用於 tclread
、 tkgetOpenFile
和類似函數的結果時。 as.raw
方法返回原始向量或原始向量列表,可用於從 Tcl 返回二進製數據。
tclVar
對象後麵的對象是使用 tclObj(x)
提取的,它還允許賦值形式,其中賦值的右側使用 as.tclObj
自動轉換。 tclObj
對象有一個 print 方法;它打印<Tcl>
,後跟對象的字符串表示形式。請注意,tclVar
對象上的as.character
是相應 Tcl 變量的名稱,而不是值。
可以加載Tcl包tclRequire
;可能需要將找到它們的目錄添加到 Tcl 搜索路徑中addTclPath
。返回值是一個類"tclObj"
如果成功則反對,或者FALSE
如果失敗(發出警告時)。將當前搜索路徑視為R字符向量,使用
strsplit(tclvalue('auto_path'), " ")[[1]]
.
Tcl 版本(包括補丁級別)以字符串形式返回(例如 "8.6.3"
)。
注意
目前,在許多情況下,包含不平衡大括號的字符串不能得到很好的處理。
例子
tclVersion()
.Tcl("format \"%s\n\" \"Hello, World!\"")
f <- function() cat("HI!\n")
## IGNORE_RDIFF_BEGIN
.Tcl.callback(f)
.Tcl.args(text = "Push!", command = f) # NB: Different address
## IGNORE_RDIFF_END
xyzzy <- tclVar(7913)
tclvalue(xyzzy)
tclvalue(xyzzy) <- "foo"
as.character(xyzzy)
tcl("set", as.character(xyzzy))
## Not run:
## These cannot be run by example() but should be OK when pasted
## into an interactive R session with the tcltk package loaded
top <- tktoplevel() # a Tk widget, see Tk-widgets
ls(envir = top$env, all.names = TRUE)
## End(Not run)
## IGNORE_RDIFF_BEGIN
ls(envir = .TkRoot$env, all.names = TRUE) # .Tcl.args put a callback ref in here
## IGNORE_RDIFF_END
也可以看看
TkWidgets
、TkCommands
、TkWidgetcmds
。
capabilities("tcltk")
查看 Tcl/Tk 支持是否已編譯到此版本中R.
相關用法
- R TkCommands Tk 非小部件命令
- R TkWidgetcmds Tk 小部件命令
- R TkWidgets Tk 小部件
- R tkpager 使用 Tk 文本小部件的頁麵文件
- R tkStartGUI Tcl/Tk GUI 啟動
- R tk_select.list 從列表中選擇項目
- R tk_messageBox TK消息框
- R tk_choose.dir 交互式選擇文件夾
- R tclServiceMode 是否允許為 Tcl 事件提供服務
- R tk_choose.files 交互式選擇文件列表
- R tkProgressBar 通過 Tk 的進度條
- R update_PACKAGES 更新現有的 PACKAGES 文件
- R print.via.format 打印實用程序
- R tibble tibble 構建 DataFrame 架
- R tidyr separate_rows 將折疊的列分成多行
- R tidyr extract 使用正則表達式組將字符列提取為多列
- R prepare_Rd 準備用於渲染的解析 Rd 對象
- R tidyr chop 砍伐和砍伐
- R tidyr unnest_longer 將列表列取消嵌套到行中
- R startDynamicHelp 啟動動態 HTML 幫助係統
- R getVignetteInfo 獲取有關已安裝 Vignettes 的信息
- R matchConcordance 源行和目標行之間的一致性
- R checkVignettes 檢查包裝插圖
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Low-level Tcl/Tk Interface。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。