Как создать строку состояния с TTK?
Вопрос
Как вы создаете свою строку состояния в нижней части вашего окна? Неактивная запись не выглядит очень приятно. Какие еще варианты есть?
Можно интегрировать панель прогресса, которая видна только по требованию?
(Я использую 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."
Решение
Я использую А. ttk::frame
виджет. В этом я помещу один или несколько ttk::label
виджеты и ttk::sizegrip
виджет на данный момент.
Что касается прогресса, просто добавьте его как обычно. Если вы используете Grid, вы можете использовать grid remove
Чтобы удалить его из состояния BARBAR, но Grid запомнит его настройки, чтобы вы могли добавить его обратно. Или вы можете пользователю lower
а также raise
Чтобы удалить его с вида и вернуть его снова.
Ваш вопрос о виджете SizeGrip неясно. Как насчет этого не работает на Windows?
Другие советы
По строке состояния вы имеете в виду, как строка состояния, которую вы найдете в нижней части самых браузеров Windows? Если это так, я обычно использую метку с его текстовой панелью, связанной с переменной, содержащей строку состояния.