[R] tklistbox and extracting selection to R

2008-07-22 Thread Judith Flores
Dear experts,

   I am trying to understand why is it that when I paste (into the R console) 
the following code to select an option from a list:

  require(tcltk)
  tt-tktoplevel()
  tl-tklistbox(tt,height=ntx,selectmode=single,background=white)
  tkgrid(tklabel(tt,text=Select the legend of ))
  tkgrid(tl)
  treatments-levels.tx
  for(i in (1:ntx))
  {
  tkinsert(tl,end,treatments[i])
  }

  OnOK-function()
  {
  tx.choice1-treatments[as.integer(tkcurselection(tl))+1]
  tkdestroy(tt)

  }
  OK.but-tkbutton(tt,text=OK, command=OnOK)
  tkgrid(OK.but)

tx.choice1


 the console can't find tx.choice1, but if I type tx.choice1 directly into 
the console, it returns the value I selected from the list.

   I am running R 2.7.1, OS: linnux, I run R within emacs.

Thank you very much for you help,

Judith

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] tklistbox and extracting selection to R

2008-07-22 Thread Greg Snow
The - assignment can be very tricky and Tk windows have their own world.  If 
you just copy and paste the below (with ntx and levels.tx defined, it would 
have been nice to have the example fully self running), then the OnOk function 
has been defined and linked to the button, but never run, so when it looks for 
tx.choice1, it has not been defined yet.  But after you make a selection and 
click on ok, then it has.  I prefer to do this type of thing fully in a 
function (keep all the varibles defined in a local environment), then return 
the result.  Something like:

getlegend - function(treatments){
  if(!require(tcltk)) stop('need tcltk')

  ntx - length(treatments)
  tx.choice1 - ''

  tt-tktoplevel()
  tl-tklistbox(tt,height=ntx,selectmode=single,background=white)
  tkgrid(tklabel(tt,text=Select the legend of ))
  tkgrid(tl)

  for(i in (1:ntx))
  {
  tkinsert(tl,end,treatments[i])
  }

  OnOK-function()
  {
  tx.choice1-treatments[as.integer(tkcurselection(tl))+1]
  tkdestroy(tt)

  }
  OK.but-tkbutton(tt,text=OK, command=OnOK)
  tkgrid(OK.but)

  tkwait.window(tt)
  return(tx.choice1)
}

Then you can run the getlegend function like:

 getlegend( levels(state.division) )

And it will wait until you select something and click on OK, then return the 
selection (which the user can save or do whatever they want with).

Hope this helps,

--
Gregory (Greg) L. Snow Ph.D.
Statistical Data Center
Intermountain Healthcare
[EMAIL PROTECTED]
(801) 408-8111



 -Original Message-
 From: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED] On Behalf Of Judith Flores
 Sent: Tuesday, July 22, 2008 10:41 AM
 To: RHelp
 Subject: [R] tklistbox and extracting selection to R

 Dear experts,

I am trying to understand why is it that when I paste
 (into the R console) the following code to select an option
 from a list:

   require(tcltk)
   tt-tktoplevel()
   tl-tklistbox(tt,height=ntx,selectmode=single,background=white)
   tkgrid(tklabel(tt,text=Select the legend of ))
   tkgrid(tl)
   treatments-levels.tx
   for(i in (1:ntx))
   {
   tkinsert(tl,end,treatments[i])
   }

   OnOK-function()
   {
   tx.choice1-treatments[as.integer(tkcurselection(tl))+1]
   tkdestroy(tt)

   }
   OK.but-tkbutton(tt,text=OK, command=OnOK)
   tkgrid(OK.but)

 tx.choice1


  the console can't find tx.choice1, but if I type
 tx.choice1 directly into the console, it returns the value I
 selected from the list.

I am running R 2.7.1, OS: linnux, I run R within emacs.

 Thank you very much for you help,

 Judith

 __
 R-help@r-project.org mailing list
 https://stat.ethz.ch/mailman/listinfo/r-help
 PLEASE do read the posting guide
 http://www.R-project.org/posting-guide.html
 and provide commented, minimal, self-contained, reproducible code.


__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.