R与tcltk:为什么我要将小部件添加到父级env(环境)变量?

时间:2016-07-06 23:09:20

标签: r user-interface tk

使用R包tcltk创建GUI时,将子窗口小部件添加到父窗口的env变量中存储的父窗口环境中,似乎是best practice。克。

library(tcltk)
win2 <- tktoplevel()
win2$env$butOK <- ttkbutton(win2, text = "OK", command = function() { tkdestroy(win2) })
tkgrid(win2$env$butOK, padx = 70, pady = 30)

“以避免全局环境中[tk widget相关]变量的膨胀”绝对正确,但我可以在不使用env <的情况下获得相同的结果 / strong>但直接将子窗口小部件存储为父窗口的变量。在我看来,这是一种更自然的OO风格,并提高了可读性:

win3 <- tktoplevel()
win3$butOK <- ttkbutton(win3, text = "OK", command = function() { tkdestroy(win3) })
tkgrid(win3$butOK, padx = 70, pady = 30)

问题:是否有充分的理由选择使用env变量的第一个版本?

PS:M。Lawrence和J. Verzani在他们的伟大着作“在R中编程图形用户界面”(2012)中演示了一种更复杂(面向对象)的方法,它将窗口小部件和状态变量封装在引用类中(请参阅第19.2章)但这会创建比我需要的更多的代码并增加复杂性(当然也解决其他问题 - 我不必解决 - 例如回调函数中的状态变量的通用查找)

0 个答案:

没有答案