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