1. Sissejuhatus
Tegemist on interpretaatoriga (Tcl) ja temaga koos töötava nö. tool-kit'iga. Koos võimaldavad nad käivitada scripte mille väljundiks on nuppude, menüüde, lahtrite jne atribuutidega aknad X Windows'i GUI's. Mitmed tcltk scripte jagatakse koos tarkvaraga, nt:
kerneli configureerimise vahend, õigemini Makefile sektsiooni:
make
xconfig
tkmpg123 - mp3 mängija
tkctkgrass - GIS'i programmi grass 50 interface
Aga kõige tähelepanuväärsem on, et ka ise ehk pole liiga keeruline teha nende graafilisi elemente produtseerivaid scripte. Rõhutame veelkord asjaolu, et ekraanile ilmuvate akende taga on tegemist scriptide mitte kompilleeritud programmidega.
Kirjutamise ajal levitatakse TCL'i versiooni 8.0.5 (ver 8.0, patchlevel
5).
Jah, selle sektsiooni eesmärk ei ole vähemalt praegu muu kui vaid anda teada, et selline asi nagu 'tcltk' on olemas ja täiendavat infot saab:
www.tcltk.com
www.scriptics.com
Vist on nii, et Slackware distributsiooniga on miskipärast ühes
väga vanad ncurses libraryd (~ 1.9.9) ja samuti tcltk (~4.5);
ergo - distributsiooni omasid on parem mitte installeerida.
Näide tcl/tk scriptist mis tood X'i akna ja võimaldab kahte väja sisestada arve ning kolmandasse välja kuvab tulemuse; all on neli nuppu mille vasjutamine vastavalt leiab sisestatud arvude: summa, korrutise, vahe ja jagatise.
#!/usr/local/bin/wish -f
wm title . "Arvutaja"
frame .frame -relief flat
pack .frame -side top -fill y -anchor center
set names { {} {esimene arv:} {teine arv:}
{tulemus:}}
foreach i {1 2 3} {
frame .frame.$i
pack .frame.$i -side top
-pady 2 -anchor e
label .frame.$i.label
-text [lindex $names $i] -anchor e
entry .frame.$i.entry
-width 30 -relief sunken
pack .frame.$i.entry .frame.$i.label
-side right
}
frame .buttons
pack .buttons -side bottom -pady 2 -anchor
center
button .buttons.korruta -text Korruta
button .buttons.liida -text Liida
button .buttons.lahuta -text Lahuta
button .buttons.jaga -text Jaga
pack .buttons.korruta .buttons.liida .buttons.lahuta
.buttons.jaga \
-side left -padx 2
frame .menu -relief raised -borderwidth 1
pack .menu -before .frame -side top -fill
x
menubutton .menu.file -text "File" -menu .menu.file.m
-underline 0
menu .menu.file.m
.menu.file.m add command -label "Exit" -command
{destroy .} -underline 0
pack .menu.file -side left
.buttons.liida config -command Liida
.buttons.korruta config -command Korruta
.buttons.lahuta config -command Lahuta
.buttons.jaga config -command Jaga
.buttons.liida config -text "Liida Ctl+l"
bind . <Control-c> Liida
.buttons.korruta config -text "Korruta Ctl+k"
bind . <Control-k> Korruta
.buttons.jaga config -text "Jaga Ctl+j"
bind . <Control-j> Jaga
.buttons.lahuta config -text "Lahuta Ctl+m"
bind . <Control-m> Lahuta
.menu.file.m entryconfig 2 -accel Ctrl+Q
bind . <Control-q> {destroy .}
focus .frame.1.entry
proc Liida {} {
.frame.3.entry delete 0 end
set arv_yks [.frame.1.entry get ]
set arv_kaks [.frame.2.entry get ]
set vastus [ expr "$arv_yks + $arv_kaks" ]
.frame.3.entry insert 0 "$vastus"
}
proc Korruta {} {
.frame.3.entry delete 0 end
set arv_yks [.frame.1.entry get ]
set arv_kaks [.frame.2.entry get ]
set vastus [ expr "$arv_yks * $arv_kaks" ]
.frame.3.entry insert 0 "$vastus"
}
proc Lahuta {} {
.frame.3.entry delete 0 end
set arv_yks [.frame.1.entry get ]
set arv_kaks [.frame.2.entry get ]
set vastus [ expr "$arv_yks - $arv_kaks" ]
.frame.3.entry insert 0 "$vastus"
}
proc Jaga {} {
.frame.3.entry delete 0 end
set arv_yks [.frame.1.entry get ]
set arv_kaks [.frame.2.entry get ]
set arv_yks [expr "$arv_yks * 1.0" ]
set arv_kaks [expr "$arv_kaks * 1.0" ]
set vastus [ format "%5.2f" [ expr "$arv_yks / $arv_kaks" ]]
.frame.3.entry insert 0 "$vastus"
}
Ja teine näide omatehtud editorist :)
#!/usr/local/bin/wish
wm title . "Editor"
frame .buttons
pack .buttons -side bottom -fill x -pady
2m
button .buttons.salvesta -text "salvesta"
-command {salvesta}
button .buttons.lopeta -text "lõpeta"
-command "destroy ."
pack .buttons.lopeta .buttons.salvesta -side
left -expand 1
text .tekst1 -relief sunken -bd 2 -yscrollcommand
".scroll set" -setgrid 1 -height 15
scrollbar .scroll -command ".text yview"
pack .scroll -side right -fill y
pack .tekst1 -expand yes -fill both
frame .raam1 -relief flat
pack .raam1 -side top -fill y -anchor center
entry .raam1.entry -width 30 -relief sunken
label .raam1.label -text "faili nimi: " -anchor
e
pack .raam1.entry .raam1.label -side
right
.buttons.salvesta config -command salvesta
proc salvesta {} {
set jutt [.tekst1 get 1.0 end ]
set fn [.raam1.entry get ]
set fileid [open "$fn" w]
seek $fileid 0 start
puts $fileid "$jutt"
close $fileid
}
gggg