Как сделать scrolledtext онлайн? - PullRequest
0 голосов
/ 21 октября 2011

Вот демонстрационный пример кода 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 статическим, то есть предотвратить текстот редактирования.

Ответы [ 2 ]

2 голосов
/ 22 октября 2011

Попробуйте этот маленький подкласс класса 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 голос
/ 22 октября 2011

Другими словами, вам нужна какая-то функциональность, например, команда unix 'tail'.

Не совсем для iwidgets, но код должен быть легко адаптирован, так что взгляните на виджет хвостов на вики Tcl'ers.http://wiki.tcl.tk/1158

...