2011-10-21 27 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 

我需要以下附加選項。

  1. 爲了iwidgets::scrolledtext在線,即,當打開iwidgets::scrolledtext當我添加一些線在/path/to/some/file到文件,我想iwidgets::scrolledtext自動更新。
  2. 使文字iwidgets::scrolledtext變爲靜態,即防止文本編輯。

回答

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

(警告:我還沒有真正嘗試過,所以我可能已經拍過究竟如何從一個小部件的iWidget做繼承此。是如何去做的原則)

1

換句話說,您需要某種功能,如unix'tail'命令。

對於iwidgets並不是真的,但代碼應該很容易調整,所以看看Tcl'ers wiki上的拖尾小部件。 http://wiki.tcl.tk/1158