Как создать строку состояния с помощью ttk? - PullRequest
0 голосов
/ 25 августа 2010

Как вы создаете свою строку состояния внизу окна? Неактивная запись выглядит не очень хорошо. Какие еще есть варианты?

Можно ли интегрировать индикатор выполнения, который виден только по запросу?

(я использую tk и ttk изнутри R.)

РЕДАКТИРОВАТЬ : Теперь вот моя вторая версия, которая отлично работает для меня, но я хотел бы отображать всю строку состояния только по требованию (аналогично тому, что строка состояния в браузере Chrome) , Как я могу это сделать? Вызов tklower (f) не помогает ...

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."

Ответы [ 2 ]

2 голосов
/ 26 августа 2010

Я использую ttk::frame виджет.В этом я поместу один или несколько ttk::label виджетов и ttk::sizegrip виджет в крайнем правом углу.

Что касается индикатора выполнения - просто добавьте его как обычно.Если вы используете сетку, вы можете использовать grid remove, чтобы удалить ее из строки состояния, но сетка запомнит ее настройки, чтобы вы могли добавить ее обратно.Или вы можете использовать lower и raise, чтобы удалить его из представления и снова вернуть.

Ваш вопрос о виджете sizegrip неясен.А как насчет того, что у вас не работает на Windows?

1 голос
/ 26 августа 2010

Под строкой статуса вы подразумеваете строку состояния, расположенную внизу большинства окон браузера?Если это так, я обычно использую метку с ее текстовой переменной, связанной с переменной, содержащей строку состояния.

...