带有 tcltk 包的 R GUI:读取文本 属性 时 tkget() 抛出错误:“[tcl] 错误选项 "get":必须是 cget 或配置”
R GUI with tcltk package: tkget() throws error when reading text property: "[tcl] bad option "get": must be cget or configure"
当我 运行 纯 Tcl/Tk 脚本时,我可以使用 cget 命令读取标签的文本 属性:
$ wish
% label .lb -text "Read this"
pack .lb
.lb cget -text
.lb
% % Read this
如果我尝试在 R 中使用 tkget 函数执行此操作,我会收到错误消息:
library(tcltk)
tt <- tktoplevel()
lb <- tklabel(tt, text = "Read this")
tkpack(lb)
tkget(lb, "text") # TODO Does not work
> Error in structure(.External(.C_dotTclObjv, objv), class = "tclObj") :
[tcl] bad option "get": must be cget or configure.
如何正确调用 tkget(没有可用的适当文档)?
或者我如何以另一种方式读取 text 属性 的当前值?
解决方法是:
library(tcltk)
tt <- tktoplevel()
lb <- tklabel(tt, text = "Read this", padx=10)
tkpack(lb)
tclvalue(tkcget(lb, "-text"))
tclvalue(tkcget(lb, "-padx"))
tkdestroy(tt)
经验教训:
不要混淆 tkget 和 tkcget(前者是 get text 小部件的命令,后者是读取小部件属性的通用命令。
您要阅读的小部件 属性 必须指定为带有 连字符 的字符串(这与您指定在使用 tcltk 在 R 中创建小部件期间相同 属性 - 请参阅上面代码中的 padx 示例)。
像往常一样:您必须使用 tclvalue 函数将 tkcget 的结果从 TCL 值转换为 R 值。
当我 运行 纯 Tcl/Tk 脚本时,我可以使用 cget 命令读取标签的文本 属性:
$ wish
% label .lb -text "Read this"
pack .lb
.lb cget -text
.lb
% % Read this
如果我尝试在 R 中使用 tkget 函数执行此操作,我会收到错误消息:
library(tcltk)
tt <- tktoplevel()
lb <- tklabel(tt, text = "Read this")
tkpack(lb)
tkget(lb, "text") # TODO Does not work
> Error in structure(.External(.C_dotTclObjv, objv), class = "tclObj") :
[tcl] bad option "get": must be cget or configure.
如何正确调用 tkget(没有可用的适当文档)? 或者我如何以另一种方式读取 text 属性 的当前值?
解决方法是:
library(tcltk)
tt <- tktoplevel()
lb <- tklabel(tt, text = "Read this", padx=10)
tkpack(lb)
tclvalue(tkcget(lb, "-text"))
tclvalue(tkcget(lb, "-padx"))
tkdestroy(tt)
经验教训:
不要混淆 tkget 和 tkcget(前者是 get text 小部件的命令,后者是读取小部件属性的通用命令。
您要阅读的小部件 属性 必须指定为带有 连字符 的字符串(这与您指定在使用 tcltk 在 R 中创建小部件期间相同 属性 - 请参阅上面代码中的 padx 示例)。
像往常一样:您必须使用 tclvalue 函数将 tkcget 的结果从 TCL 值转换为 R 值。