2011-10-21 9 views
0

ここにはiwidgets::scrolledtextのTCLコードのデモサンプルがあります。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 

次の追加オプションが必要です。 iwidgets::scrolledtextが開かれたとき

  1. はすなわち、オンラインiwidgets::scrolledtextを作るために、私は/path/to/some/fileでファイルにいくつかの行を追加するとき、私はiwidgets::scrolledtextを自動的に更新することにしたいです。
  2. テキストをiwidgets::scrolledtextに静的にする、つまりテキストが編集されないようにする。

答えて

2

スクロールテキストクラスのこの小さなサブクラスを試してみてください。

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] 
} 

(警告:私は実際にそれを試していませんでしたので、私はiWidgetのウィジェットから継承を行う方法を正確にふわふわしましたかもしれません。この。しかし、それを行う方法の原則です。)

1

つまり、unixの 'tail'コマンドのような機能が必要です。

iwidgetsではなく、コードを簡単に修正する必要があるので、Tcl'ers wikiのtailingウィジェットを見てください。 http://wiki.tcl.tk/1158

関連する問題