Skip to content
Prev 295535 / 398502 Next

set tkscale by tkentry

Greg Snow <538280 <at> gmail.com> writes:
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)