Come creare una linea di stato con TTK?
Domanda
Come si fa a creare la vostra linea di stato nella parte inferiore della finestra? Una voce non attiva non ha un aspetto molto bello. Quali altre opzioni ci sono?
E 'possibile integrare una barra di avanzamento, che è visibile solo su richiesta?
(sto usando tk e TTK dall'interno R.)
Modifica : Ora qui è la mia seconda versione, che funziona bene per me, ma vorrei per visualizzare l'intera barra di stato solo su richiesta (simile a quello che la barra di stato del browser Chrome fa ). Come posso fare ciò? Chiamata tklower (f) non aiuta ...
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."
Soluzione
Io uso un widget ttk::frame
. In che metterò uno o più widget ttk::label
, e un widget ttk::sizegrip
in fondo a destra.
Per quanto riguarda la barra di avanzamento - basta inserirlo come al solito. Se si utilizza griglia, è possibile utilizzare grid remove
per rimuoverlo dalla barra di stato, ma griglia si ricorderà le sue impostazioni in modo da poter aggiungere di nuovo a destra. In alternativa, è possibile lower
utente e raise
per rimuoverlo dalla vista e riportarlo di nuovo.
La tua domanda circa il widget di sizegrip non è chiaro. Che dire non funziona per voi su Windows?
Altri suggerimenti
In linea di stato vuoi dire come la barra di stato si trova nella parte inferiore della maggior parte delle finestre del browser? In caso affermativo, di solito utilizzare un'etichetta con la sua textvariable collegato a una variabile contenente la stringa di stato.