2012-07-03 7 views
5

Ho uno script long-ish per fare un po 'di analisi dei dati, e deve connettersi a diversi database. Uno dei database tende ad aggiornare la mia password più frequentemente di quanto mi piaccia, quindi mi piacerebbe aggiungere una casella popup per inserire la mia password corrente. Ho trovato questo esempio ma non capisco abbastanza tcltk per vedere hwo restituire il mio valore quando la finestra di dialogo viene chiusa. Ho pensato di definirla come una variabile globale (<<-) all'interno della funzione OnOK, ma questo sembra disordinatoAggiungere una casella di testo popup all'interno di uno script R utilizzando tcltk

require(tcltk) 
tt<-tktoplevel() 
Name <- tclVar("Password") 
entry.Name <-tkentry(tt,width="20",textvariable=Name) 
tkgrid(tklabel(tt,text="Enter Password")) 
tkgrid(entry.Name) 
OnOK <- function() 
{ 
    NameVal <- tclvalue(Name) 
    tkdestroy(tt) 
} 
OK.but <-tkbutton(tt,text=" OK ",command=OnOK) 
tkbind(entry.Name, "<Return>",OnOK) 
tkgrid(OK.but) 
tkfocus(tt) 

risposta

4

si potrebbe trovare la funzione di ginputgWidgets avvolge ciò che Greg neve suggerisce per voi:

require(gWidgets) 
options(guiToolkit="tcltk") 
NameVal <- ginput("Enter your passsword:") 

NameVal conterrà la stringa inserita o NA se si annulla.

4

È risposto alla tua domanda: si fa infatti bisogno <<- in questi esempi TclTk --- vedere i vari post di Peter nel corso degli anni, o altri esempi in giro, altri pacchetti CRAN che usano o anche nel pacchetto stesso. Prova

library(tcltk) 
    demo("tkcanvas") 

e vedere come tratta ad es. lastX, lastY.

1

È possibile utilizzare le funzioni tkwait.window o tkwait.variable. Usa il codice sopra per aprire la finestra, quindi usa una delle funzioni di attesa (tkwait.window interromperà lo script fino a quando la finestra non verrà distrutta, essenzialmente quando fai clic su OK). Poi, quando lo script procede, avrai il tuo valore nella variabile all'interno dello script/funzione e potrai usarlo senza dover assegnare una variabile globale.

Problemi correlati