Kay
Kay

Reputation: 2854

Simple Dialog with R Tcl/Tk

I try to call a simple function with a Tcl widget dialog - put x, y and z and sum them up, displaying the result in the console, with a messagebox ("done!") - But I'm missing something with the variables and didn't manage to do the message box..

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()

Upvotes: 3

Views: 2491

Answers (1)

Karsten W.
Karsten W.

Reputation: 18440

I do not see where your myfun is defined. Here is your code slightly altered

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()

Upvotes: 3

Related Questions