带有 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)

经验教训:

  1. 不要混淆 tkgettkcget(前者是 get text 小部件的命令,后者是读取小部件属性的通用命令。

  2. 您要阅读的小部件 属性 必须指定为带有 连字符 的字符串(这与您指定在使用 tcltk 在 R 中创建小部件期间相同 属性 - 请参阅上面代码中的 padx 示例)。

  3. 像往常一样:您必须使用 tclvalue 函数将 tkcget 的结果从 TCL 值转换为 R 值。