#user-interface #tcl #tk #incr-tcl
#пользовательский интерфейс #tcl #tk #incr-tcl
Вопрос:
Вот демонстрационный пример кода 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
Мне нужны следующие дополнительные параметры.
- Чтобы сделать
iwidgets::scrolledtext
онлайн, то есть когдаiwidgets::scrolledtext
открывается и когда я добавляю несколько строк в file at/path/to/some/file
, я хочуiwidgets::scrolledtext
, чтобы он обновлялся автоматически. - Сделать текст
iwidgets::scrolledtext
статичным, то есть запретить редактирование текста.
Ответ №1:
Попробуйте этот небольшой подкласс класса 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. Это принцип того, как это сделать.)
Ответ №2:
Другими словами, вам нужна какая-то функциональность, подобная команде unix ‘tail’.
Не совсем для iwidgets, но код должен быть легко адаптирован, так что взгляните на tailing widget на Tcl ‘ers wiki. http://wiki.tcl.tk/1158