r tk combobox

varias cajas combinadas en R usando tcltk



combobox (2)

¿Por qué no solo usas ttkcombobox ?

require(tcltk) tt <- tktoplevel() tkwm.title(tt, "Fruits!") tkwm.geometry(tt, "200x150+300+300") onOK <- function() { fav <- tclvalue(favFruit) worst <- tclvalue(worstFruit) if (fav != "Choose one") tkmessageBox(title="Favorite fruit", message = paste("Your favorite fruit is", fav)) if (worst != "Choose one") tkmessageBox(title="Worst fruit", message = paste("The fruit you like the least is", worst)) if (fav == "Choose one" & worst == "Choose one") tkmessageBox(title="Well...", message = "Select a fruit!") } label1 <- tklabel(tt, text="What''s your favorite fruit?") label2 <- tklabel(tt, text="What fruit you like the least?") fruits <- c("Choose one", "Apple", "Orange", "Banana", "Pear") # Default selections for the two combo boxes favFruit <- tclVar("Choose one") worstFruit <- tclVar("Choose one") # 1st box combo.1 <- ttkcombobox(tt, values=fruits, textvariable=favFruit, state="readonly") # 2nd box combo.2 <- ttkcombobox(tt, values=fruits, textvariable=worstFruit, state="readonly") # If you need to do something when the user changes selection just use # tkbind(combo.1, "<<ComboboxSelected>>", functionname) OK.but <- tkbutton(tt,text=" OK ", command = onOK) tkpack(label1, combo.1) tkpack(label2, combo.2) tkpack(OK.but) tkfocus(tt)

PD: personalmente, tcltk a favor de RGtk2 , mucho más flexible en mi opinión y puedes diseñar interfaces visualmente usando Glade Interface Designer

He intentado definir varios cuadros combinados en R utilizando el paquete tcltk pero fue en vano. Estoy usando el siguiente código. Mi inspiración estaba aquí , sin embargo, parece que no puedo simplemente etiquetarlos comboBox1, comboBox2, etc ... así que decidí probar y establecer sus valores de salida en un vector ... pero sus valores de salida no tienen ningún sentido para yo ... alguna idea por ahí?

muchas gracias

require(tcltk) tclRequire("BWidget") tt <- tktoplevel() tkgrid(tklabel(tt,text="What''s your favorite fruits?")) fruit <- c("Apple","Orange","Banana","Pear") num <- c(0:3) num.fruit <- cbind(num, fruit) #####1st box comboBox <- tkwidget(tt,"ComboBox",editable=FALSE,values=num.fruit[,2]) tkgrid(comboBox) Cbox1<- comboBox tkfocus(tt) ######2nd box comboBox <- tkwidget(tt,"ComboBox",editable=FALSE,values=num.fruit[,2]) tkgrid(comboBox) Cbox2 <- comboBox ### ##preliminary wrap-ip to pass to OnOK function pref1 <- tcl(Cbox1,"getvalue") pref2 <- tcl(Cbox2,"getvalue") Prefs <- c(pref1,pref2) ######action on OK button OnOK <- function() { fruitChoice <- fruits[as.numeric(tclvalue(tcl(Prefs,"getvalue")))+1] tkdestroy(tt) msg <- paste("Good choice! ",fruitChoice,"s are delicious!",sep="") tkmessageBox(title="Fruit Choice",message=msg) } OK.but <-tkbutton(tt,text=" OK ",command=OnOK) tkgrid(OK.but) tkfocus(tt)


Si no desea involucrarse demasiado con tcltk, puede que le resulte más fácil trabajar con gWidgets.

library(gWidgets) options(guiToolkit="tcltk") ## or RGtk2 or Qt w <- gwindow("Multiple comboboxes") tbl <- glayout(cont=w, horizontal=FALSE) fruit <- c("Apple","Orange","Banana","Pear") tbl[1,1] <- "Favorite fuits" tbl[1,2] <- (cb1 <- gcombobox(fruit, cont=tbl)) tbl[2,1] <- "Other fruit?" tbl[2,2] <- (cb2 <- gcombobox(fruit, cont=tbl)) tbl[3,2] <- (b <- gbutton("Ok", cont=tbl)) addHandlerClicked(b, handler=function(h,...) { cat(sprintf("You picked %s and %s/n", svalue(cb1), svalue(cb2))) })