代码之家  ›  专栏  ›  技术社区  ›  Karsten W.

如何用ttk创建状态行?

  •  0
  • Karsten W.  · 技术社区  · 14 年前

    如何在窗口底部创建状态行?不活动的条目看起来不太好。还有其他选择吗?

    (我从R内部使用tk和ttk。)

    :现在是我的第二个版本,对我来说很好,但我只想按需显示整个状态栏(类似于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 回复  |  直到 14 年前
        1
  •  2
  •   Bryan Oakley    14 年前

    我用一个 ttk::frame ttk::label ttk::sizegrip 在最右边。

    至于进度条——像往常一样添加它。如果你使用网格,你可以使用 grid remove lower raise 把它从视野中移开,再带回来。

    你关于sizegrip小部件的问题还不清楚。在windows上它不适合你怎么办?

        2
  •  1
  •   slebetman    14 年前

    你所说的“状态行”是指大多数浏览器窗口底部的状态栏吗?如果是这样,我通常使用一个标签,它的textvariable链接到一个包含状态字符串的变量。