R with tcltk:为什么我应该向parents env(环境)变量添加小部件?
当使用R包R with tcltk:为什么我应该向parents env(环境)变量添加小部件?,r,user-interface,tk,R,User Interface,Tk,当使用R包tcltk创建gui时,将子窗口小部件添加到父级环境(存储在父级的env变量中)似乎是一个很好的选择。g library(tcltk) win2 <- tktoplevel() win2$env$butOK <- ttkbutton(win2, text = "OK", command = function() { tkdestroy(win2) }) tkgrid(win2$env$butOK, padx = 70, pady = 30) 问题:是否有充分的理由选择使用
tcltk
创建gui时,将子窗口小部件添加到父级环境(存储在父级的env
变量中)似乎是一个很好的选择。g
library(tcltk)
win2 <- tktoplevel()
win2$env$butOK <- ttkbutton(win2, text = "OK", command = function() { tkdestroy(win2) })
tkgrid(win2$env$butOK, padx = 70, pady = 30)
问题:是否有充分的理由选择使用env
变量的第一个版本?
PS:M.Lawrence和J.Verzani在他们的巨著《在R中编程图形用户界面》(2012)中展示了一种更加复杂(面向对象)的方法,将小部件和状态变量封装在一个引用类中(参见第19.2章),但这会产生比我需要的多得多的代码,并增加复杂性(当然也要解决其他问题-我不必解决-例如,在回调函数中查找状态变量)我认为向env变量添加小部件可以避免复制父对象(R的COW priciniple),但事实并非如此:
>库(tcltk)>库(pryr)#对于mem tracing>win2 address(win2)[1]“0x3fdaff0”>win2$env$butOK address(win2)[1]“0x35e82c8”
我仍在寻找答案。我认为向env变量添加小部件可以避免复制父对象(R的COW priciniple),但事实并非如此:>library(tcltk)>library(pryr)#对于mem tracing>win2 address(win2)[1]“0x3fdaff0”>win2$env$butOK address(win2)[1]“0x35e82c8”
我仍在寻找答案。
win3 <- tktoplevel()
win3$butOK <- ttkbutton(win3, text = "OK", command = function() { tkdestroy(win3) })
tkgrid(win3$butOK, padx = 70, pady = 30)