Tcl/Tk (Tool Command Language / Tool Kit)
 

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