当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。