[R] set tkscale by tkentry
j verzani
jverzani at gmail.com
Thu May 24 19:27:22 CEST 2012
Greg Snow <538280 <at> gmail.com> writes:
>
> I believe that what is happening is that when you try to edit the
> entry widget any intermediate values get sent to the slider widget
> which then checks to see if they are in the allowable range and if it
> is not then it sets the value to either the minimum and maximum and
> sends that back to the entry widget while you are still trying to edit
> it. Even if you highlight a single digit and try to replace it with a
> different digit it first deletes the highlighted digit resulting in a
> number smaller than the minimum of the slider which then updates the
> entry widget to the minimum before the new digit can go in, then
> adding the new digit makes it larger than the slider maximum.
>
Greg is right. You might try validating on focusout, rather than the key,
but this is easy enough to do in R code, rather than let tcl do that work:
a <- 306870; b <- 3026741
tt<-tktoplevel()
varalpha <- tclVar(a)
charalpha <- tclVar(as.character(a))
scale <- tkscale(tt, from=a, to=b, resolution=1, label="alpha",
variable=varalpha,
showvalue=TRUE, orient="horiz")
ed <- tkentry(tt, textvariable=charalpha)
tkpack(ed)
tkpack(scale)
## connect
tkconfigure(scale, command=function(...) {
tclvalue(charalpha) <- as.character(tclvalue(varalpha))
})
valid_input <- function(...) {
val <- as.numeric(tclvalue(charalpha))
if(a <= val & val <= b) {
message("set to ", val)
tclvalue(varalpha) <- val
} else {
message("not valid...")
tkfocus(ed)
}
}
tkbind(ed, "<Return>", valid_input)
tkbind(ed, "<FocusOut>", valid_input)
More information about the R-help
mailing list