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'erswikiのテーリングウィジェットを見てください。 http://wiki.tcl.tk/1158

于 2011-10-21T20:36:13.347 に答える