Cómo crear una línea de estado con TTK?
Pregunta
¿Cómo se crea la línea de estado en la parte inferior de la ventana? Una entrada inactiva no se ve muy bonito. ¿Qué otras opciones hay?
¿Es posible integrar una barra de progreso que es visible sólo en la demanda?
(estoy usando tk y ttk desde dentro de R).
Editar : Ahora aquí es mi segunda versión, que funciona bien para mí, pero me gustaría mostrar toda la barra de estado en la demanda sólo (similar a lo que hace la barra de estado del navegador Chrome ). ¿Cómo puedo hacer eso? Llamando tklower (f) no ayuda ...
library(tcltk)
library(tcltk2)
tkdestroy(root)
root <- tktoplevel()
status <- tclVar("")
progress <- tclVar("0")
b <- tk2button(root, text="fake doing something!")
tkpack(b, padx=40, pady=10)
o <- tk2checkbutton(root, text="show progress", variable=progress)
tkpack(o, pady=10)
f <- tk2frame(root, relief="sunken")
l <- tk2label(f, textvariable=status)
tkpack(l, side="left", pady=2, padx=5, expand=0, fill="x")
tkpack(f, side="left", expand=1, fill="x", anchor="s")
sg <- ttksizegrip(root)
tkpack(sg, side="left", expand=0, anchor="se")
doit <- function() {
tclvalue(status) <- "working (hard) ..."
tcl("update")
do.pb <- tclvalue(progress)=="1"
if(do.pb) {
pb <- tk2progress(f, length=60, mode="determinate")
tkpack(pb, side="right", expand=0, padx=3, pady=2)
tkconfigure(pb, maximum=100, value=0)
}
for(i in 1:100) {
if(do.pb) {
tkconfigure(pb, value=i)
tcl("update")
}
Sys.sleep(0.03)
}
if(do.pb) tkdestroy(pb)
tclvalue(status) <- "Ready."
}
tkconfigure(b, command=doit)
tclvalue(status) <- "Ready."
Solución
Yo uso un widget ttk::frame
. En ese Voy a colocar una o más widgets ttk::label
, y un widget ttk::sizegrip
en el extremo derecho.
En cuanto a la barra de progreso - sólo tiene que añadir que, como de costumbre. Si utiliza la red, puede utilizar grid remove
para quitarlo de la barra de estado, pero rejilla recordará su configuración para que pueda agregar de nuevo a la derecha. O bien, puede lower
de usuario y raise
para quitarlo de la vista y traerlo de vuelta otra vez.
Tu pregunta sobre el widget SizeGrip no está claro. ¿Qué hay de que no funciona para usted en las ventanas?
Otros consejos
Por línea de estado qué se refiere como la barra de estado se encuentra en la parte inferior de la mayoría de las ventanas del navegador? Si es así, que suelen utilizar una etiqueta con su textVariable ligado a una variable que contiene la cadena de estado.