j'aimerais savoir si quelqu'un a déjà utilisé des checkboxes avec le package tcltk. Si oui, j'ai quelques problèmes dans mon code :
Code : Tout sélectionner
library(DBI)
library(RMySQL)
library(tcltk2)
require(tcltk)
tclRequire("BWidget")
tt<-tktoplevel()
#choice = table quelconque résultant d'un choix effectué à l'aide d'une #listbox
rs <- dbSendQuery(con, statement = paste("SELECT DISTINCT Recipe FROM",choice))
recipe <- fetch(rs, n = -1)
recipeFinal <- recipe[,1]
tkgrid(tklabel(tt,text="select a recipe"))
cbValue<-list()
cb<-list()
sw <- tkwidget (tt,"ScrolledWindow",relief="sunken",auto="none",borderwidth=2)
sf <- tkwidget(sw,"ScrollableFrame")
tcl(sw,"setwidget",sf)
subfID <- tclvalue(tcl(sf,"getframe"))
for (i in 1:length(recipeFinal)){
cb[[i]] <- tcl("checkbutton",paste(subfID,".",i,sep=""))
cbValue[[i]]<-tclVar("0")
tkconfigure(cb[[i]],variable=cbValue[[i]])
lab <- tcl("label",paste(subfID,".lab",i,sep=""),text=recipeFinal[i])
tkgrid(lab,cb[[i]])
tkbind(cb[[i]],"<FocusIn>",function() tcl(sf,"see",cb[[i]]))
}
tkpack(sw,fill="both",expand="yes")
OnOK <- function(){
for(i in (1:length(recipeFinal))){
cbVal <- as.character(tclvalue(cbValue[[i]]))
if (cbVal=="1")
tkmessageBox(message="recipe",recipeFinal[i],"selected")
if (cbVal=="0")
tkmessageBox(message="recipe",recipeFinal[i],"not selected", icon="warning")
}
tkdestroy(tt)
}
OK.but <- tkbutton(tt,text="OK",command=OnOK)
tkgrid(OK.but)
tkfocus(tt)
Je tiens à préciser que l'on m'a aidé pour rédiger ce code, donc j'avoue ne pas saisir à 100% toutes les facettes de ce code.
Plusieurs choses me dérangent :
- Je n'arrive pas à conserver l'affichage de "select a recipe", les checkboxes s'affichent par dessus.
- Le bouton OK ne s'affiche pas.
- J'aimerais comprendre réellement le fonctionnement des scrollframes.
Voilà, si quelqu'un peut m'aider (même partiellement), ce serait sympa.
Merci d'avance.