2012-08-08 87 views
3

我嘗試使用Tcl Widget對話框調用簡單函數 - 將x,y和z加起來,並在控制檯中顯示結果,並帶有一個消息框(「done!」 ) - 但我丟失了一個與變量的東西,並沒有能做到的消息框..使用R Tcl/Tk簡單對話框

mydialog <- function(){ 

     myfun <- function(x,y,z) x+y+z 

     xvar <- tclVar("1") 
     yvar <- tclVar("2") 
     zvar <- tclVar("3") 

     tt <- tktoplevel() 
     tkwm.title(tt,"MYTEST") 
     x.entry <- tkentry(tt, textvariable=xvar) 
     y.entry <- tkentry(tt, textvariable=yvar) 
     z.entry <- tkentry(tt, textvariable=zvar) 

     reset <- function() 
     { 
     tclvalue(xvar)<-"" 
     tclvalue(yvar)<-"" 
     tclvalue(zvar)<-"" 
     } 

     reset.but <- tkbutton(tt, text="Reset", command=reset) 

     x <- tclvalue(xvar) 
     y <- tclvalue(yvar) 
     z <- tclvalue(zvar) 
     submit.but <- tkbutton(tt, text="submit", command=function() substitute(myfun(x,y,z))) 

     tkgrid(tklabel(tt,text="MYTEST"),columnspan=2) 
     tkgrid(tklabel(tt,text="x variable"), x.entry) 
     tkgrid(tklabel(tt,text="y variable"), y.entry) 
     tkgrid(tklabel(tt,text="z variable"), z.entry) 
     tkgrid(submit.but, reset.but) 

    } 

mydialog() 

回答

2

我沒有看到你的myfun定義。這裏是你的代碼稍有變化

mydialog <- function(){ 

     xvar <- tclVar("1") 
     yvar <- tclVar("2") 
     zvar <- tclVar("3") 

     tt <- tktoplevel() 
     tkwm.title(tt,"MYTEST") 
     x.entry <- tkentry(tt, textvariable=xvar) 
     y.entry <- tkentry(tt, textvariable=yvar) 
     z.entry <- tkentry(tt, textvariable=zvar) 

     reset <- function() 
     { 
     tclvalue(xvar)<-"" 
     tclvalue(yvar)<-"" 
     tclvalue(zvar)<-"" 
     } 

     reset.but <- tkbutton(tt, text="Reset", command=reset) 

     submit <- function() { 
     x <- as.numeric(tclvalue(xvar)) 
     y <- as.numeric(tclvalue(yvar)) 
     z <- as.numeric(tclvalue(zvar)) 
     print(x+y+z) 
     tkmessageBox(message="Done!") 
     #tkdestroy(tt) 
     } 
     submit.but <- tkbutton(tt, text="submit", command=submit) 

     tkgrid(tklabel(tt,text="MYTEST"),columnspan=2) 
     tkgrid(tklabel(tt,text="x variable"), x.entry) 
     tkgrid(tklabel(tt,text="y variable"), y.entry) 
     tkgrid(tklabel(tt,text="z variable"), z.entry) 
     tkgrid(submit.but, reset.but) 

    } 

mydialog() 
+0

非常感謝!我編輯了我的帖子,在那裏我忘了粘貼myfun的def ..(同時我知道替代品(..)在這個地方完全錯了。) – Kay 2012-08-08 22:19:14

+0

歡迎!也許'do.call(myfun,list(x,y,z))'是你正在尋找的東西。 – 2012-08-08 22:30:58