当我运行纯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 属性的当前值?
答案 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)
经验教训:
请勿将 tkget 与 tkcget 混淆(前者是 get 命令 text 小部件,后者是读取小部件属性的通用命令。
您要读取的窗口小部件属性必须指定为带有连字符的字符串(这与使用tcltk在R中创建窗口小部件期间指定相同属性的方式不同 - 请参阅上面代码中的 padx 示例。
像往常一样:您必须使用 tclvalue 函数将tkcget的结果从TCL值转换为R值。