0

这是 TCL 代码的演示示例iwidgets::scrolledtext

package require Iwidgets
iwidgets::scrolledtext .st \
        -labeltext "Scrolledtext Example" \
        -visibleitems 70x20 \
        -textfont {Courier 10} \
        -textbackground black \
        -vscrollmode dynamic \
        -hscrollmode dynamic \
        -wrap none
pack .st -fill both -expand true
.st component text configure -foreground green
.st import /path/to/some/file

我需要以下附加选项。

  1. iwidgets::scrolledtext在线制作,即何时iwidgets::scrolledtext打开并且当我在文件中添加一些行时/path/to/some/file,我希望iwidgets::scrolledtext自动更新。
  2. 使文本处于iwidgets::scrolledtext静态,即防止文本被编辑。
4

2 回答 2

2

试试这个 scrolledtext 类的小子类:

itcl::class TailScrolled {
    inherit iwidgets::Scrolledtext
    destructor {}
    public method import {filename}
    private variable fd
    private variable cb
    private method ReadAppend {}
}

itcl::body TailScrolled::destructor {} {
    if {[info exist fd]} {
        close $fd
        after cancel $cb
    }
}
itcl::body TailScrolled::import {filename} {
    if {[info exist fd]} {
        close $fd
        after cancel $cb
    }
    set fd [open $filename r]
    ReadAppend
}
itcl::body TailScrolled::ReadAppend {} {
    set cb [after 500 [::itcl::code ReadAppend]]
    insert end [read $fd]
}

(警告:我实际上并没有尝试过,所以我可能对如何从 IWidgets 小部件进行继承感到困惑。不过,这是如何做到这一点的原则。)

于 2011-10-22T07:05:01.650 回答
1

所以换句话说,你想要某种功能,比如 unix 'tail' 命令。

对于 iwidgets 来说不是真的,但代码应该很容易修改,所以请查看 Tcl'ers wiki 上的 tailing 小部件。 http://wiki.tcl.tk/1158

于 2011-10-21T20:36:13.347 回答