當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R TclInterface 低級 Tcl/Tk 接口


R語言 TclInterface 位於 tcltk 包(package)。

說明

這些函數和變量提供了之間的基本粘合R以及 Tcl 解釋器和 Tk GUI 工具包。 Tk 窗口可以通過以下方式表示R對象。 Tcl變量可以通過類的對象訪問tclVarTcl 對象的 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

對於tclvalue 賦值,是一個字符串。對於 tclObj 賦值,類 tclObj 的對象

ID

窗口 ID

parent

成為結果窗口的父窗口的窗口

path

包含 Tcl 包的目錄的路徑

package

Tcl 包名稱

warn

合乎邏輯的。如果沒有找到警告?

...

附加參數。見下文。

init

初始化值

細節

其中許多函數並不適合一般用途,而是由創建和操作 Tk 小部件和 Tcl 對象的命令在內部使用。在最低級別,.Tcl 將命令作為文本字符串發送到 Tcl 解釋器,並將結果作為類 tclObj 的對象返回(見下文)。較新的變體 .Tcl.objv 接受 tclObj 對象命名列表形式的參數。

.Tcl.argstag = value 對的 R 參數列表轉換為 Tcl -option value 樣式,從而實現兩種語言之間的簡單翻譯。要將沒有前置選項標誌的值發送到 Tcl,隻需使用未標記的參數。在極少數情況下,需要一個無法使用後續值 tag = NULL 的選項。大多數值隻是轉換為字符模式並插入命令字符串中,但窗口對象是使用其 ID 字符串傳遞的,回調是通過 .Tcl.callback 的結果傳遞的。隻需在前麵添加 - 即可將標簽轉換為選項標誌

.Tcl.args.objv 的用途與 .Tcl.args 類似,但會生成適合傳遞給 .Tcl.objvtclObj 對象列表。列表的名稱由 .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) 的元素。多個索引粘貼在一起並用逗號分隔以形成單個名稱。您可以分別使用 lengthnames 的方法查詢數組中的長度和名稱集;這些不能被有意義地設置,因此作業表單的存在隻是為了打印錯誤消息。

可以直接訪問 Tcl 的‘dual-ported’對象,從而避免對其字符串表示形式的解析和反解析。這是通過使用 tclObj 類的對象來實現的。可以使用 tclvalue 提取(但不能設置)此類對象的字符串表示形式,並使用標準強製轉換執行到 "character""double""integer""logical""raw" 模式向量的轉換函數 as.character 等。相反,可以使用 as.tclObj 轉換此類向量。對於由 drop 參數控製的長度為 1 的向量應該發生什麽,存在模糊性;在某些情況下,這種區別對 Tcl 很重要,盡管大多數情況下 Tcl 會同等對待它們。請注意,tclvalueas.character 在字符串表示形式嵌入空格的對象上有所不同,有時首選前者,特別是當應用於 tclreadtkgetOpenFile 和類似函數的結果時。 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

也可以看看

TkWidgetsTkCommandsTkWidgetcmds

capabilities("tcltk")查看 Tcl/Tk 支持是否已編譯到此版本中R.

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Low-level Tcl/Tk Interface。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。