带有tcltk包的R GUI:tkget()在读取文本属性时抛出错误:“[tcl] bad option”get“:必须是cget或configure”

时间:2016-01-05 09:42:24

标签: r user-interface tcl tk ttk

当我运行纯Tcl / Tk脚本时,我可以使用cget命令读取标签的text属性:

$ wish
% label .lb -text "Read this"
pack .lb
.lb cget -text
.lb
% % Read this

如果我尝试使用tkget函数在R中执行此操作,则会出现错误:

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 属性的当前值?

1 个答案:

答案 0 :(得分:2)

解决方案是:

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. 请勿将 tkget tkcget 混淆(前者是 get 命令 text 小部件,后者是读取小部件属性的通用命令。

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

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