如何在线制作scrolledtext?

时间:2011-10-21 11:32:58

标签: user-interface tcl tk incr-tcl

以下是iwidgets::scrolledtext的TCL代码演示示例。

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自动更新。< / LI>
  2. 使文本保持iwidgets::scrolledtext静态,即阻止文本编辑。

2 个答案:

答案 0 :(得分: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小部件中确切地说如何继承。这是如何做到这一点的原则。)

答案 1 :(得分:1)

所以换句话说,你想要一些像unix'tail'命令这样的功能。

不是真的对于iwidgets,但代码应该很容易适应,所以看看Tcl'ers wiki上的尾部小部件。 http://wiki.tcl.tk/1158