Professional Documents
Culture Documents
Developed in late 1980s by John Ousterhout at UC Berkeley Created as a single language used to control IC tools, rather than use a different language for each one. Provides for extensions such as Tk (GUI), [incr Tcl] (OOP), etc.
Tcl/Tk: An Introduction 2
Timeline of Tcl
1. Tcl created as general-purpose command/scripting language by John Ousterhout
4. Scriptics formed: Evolve and extend Tcl platform Create development tools
7.0 Sept 7.4 July 7.6 Oct 8.0 Aug
6.0 Sept
1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001
8.2 Aug
2. Open source distributions from U.C. Berkeley: Easy GUIs under Unix Extensible applications
3.
Tcl enhanced at Sun Microsystems: Windows, Macintosh ports Web/Internet support Java support
Slide courtesy of ActiveState
Tcl/Tk: An Introduction
Installing Tcl/Tk
Windows/Mac: Latest distribution maintained by ActiveState (ActiveTcl 8.4.1.0). Download at http://www.tcl.tk/ Unix/Linux: Tcl/Tk is included with most Unix/Linux distributions
Tcl/Tk: An Introduction 4
2.
3.
Tcl/Tk: An Introduction
Basics
Tcl script =
Sequence of commands.
One or more words separated by white space. First word is command name, others are arguments. Returns string result.
set a 22 set b 33
Tcl command =
Example:
Tcl/Tk: An Introduction
[ ] and $ substitution
Substitutions:
variable substitution: set id 631 puts This class is CMSC $id command substitution, evaluated as separate script: set b [expr $id*4]
Tcl/Tk: An Introduction
Math Evaluation
expr command evaluates expressions. Sample command Result set b 5 5 expr ($b*4)-3 17 expr $b <= 2 0 Many other math functions included, such as sin, cos, sqrt, and log.
Tcl/Tk: An Introduction
Conditional/Looping Statements
Like most languages, Tcl supports an if statement, though the keywords then and else are optional. For loop: for {set a 0} {$a < 100} {incr a} { #more code here } While loop is also supported
Tcl/Tk: An Introduction 9
Tcl lists
list are ordered collections of elements any proper list can also be a Tcl command (eval) concat list list concatenate lists
concat {a b c} {d e f} a b c d e f
Tcl Arrays
set nicholas(1) 331 set nicholas(2) [expr $nicholas(1) + 300] array names nicholas
=>
1,1 1,2
Regular Expressions
Tcl has full support for regular expression pattern matching and substitution regexp command for matching, places matched chars into variable specified regsub for substitution
Tcl/Tk: An Introduction 12
Tk : An Introduction
Tk is a Toolkit for programmable user interfaces. Tk provides a set of Tcl commands that create and manipulate widgets. John Ousterhout began work on Tk in late 1988; finished in 1990. Tk's GUI facilities were both very simple and very powerful.
Tcl/Tk: An Introduction 13
Tk : Widgets
A widget is window in a GUI with particular appearance and behavior. Widget types include buttons, scrollbars, menus, and text windows. Tk also has a general purpose drawing widget called a canvas that lets you create lightweight items such as lines, boxes and bitmaps.
Tcl/Tk: An Introduction 14
Tk : Widgets (Cont)
Tk widgets organized in a hierarchy. children windows inside a parent window Parent widgets use frame widgets to lay the children windows out Can create complex windowing schemes using Tk widget hierarchy.
Tcl/Tk: An Introduction 15
Tk : Geometry Manager
Widgets are under the control of geometry manager that controls their size and location on the screen Until the GM learns about a widget, it is not mapped onto a screen Types of Geometry Managers:
Tk : A Small Example
#!/usr/local/bin/wish button .hello -text Hello -command {puts stdout "Hello World!"} pack .hello -padx 20 -pady 10
Tcl/Tk: An Introduction
17
Tk : Events
Tk-based application has event-driven control flow. Usually Tk widgets handle most events automatically. For specialized behavior, bind command is used.
Tcl/Tk: An Introduction
18
Tk : Events (Cont)
Examples of events include mouse motion, mouse clicks, keystrokes, window resizing, window destruction Virtual events like cut and paste are also possible. Event bindings grouped into classes called bindtags which are associated with a class. Focusing on windows helps switch bindtags.
Tcl/Tk: An Introduction 19
wm title . tkdiff
Tcl/Tk: An Introduction
20
Example: (Cont)
# frame for the first file frame .first -borderwidth 1 label .first.name1 -text "Filename 1:" -foreground red entry .first.ent1 -width 68 -relief sunken \ -textvariable name1 pack .first.name1 -side left pack .first.ent1 -side left -fill x -expand true
Tcl/Tk: An Introduction
21
Example: (Cont)
# frame for the second file frame .second -borderwidth 0 label .second.name2 -text "Filename 2:" -foreground blue entry .second.ent2 -width 68 -relief sunken \ -textvariable name2 pack .second.name2 -side left pack .second.ent2 side left -fill x -expand true pack .first .second -fill both
Tcl/Tk: An Introduction
22
Example: (Cont)
# frame for check boxes
set third [frame .third -borderwidth 2] checkbutton $third.1 -text "Ignore Case Changes" \ -variable cFlag checkbutton $third.2 -text "Ignore Whitespace Diffs" \ -variable wFlag pack $third.1 $third.2 -side left pack $third -fill x
Tcl/Tk: An Introduction
23
Example: (Cont)
# frame for command buttons
set fourth [frame .four -borderwidth 2] button $fourth.1 -text Quit -command Exit $fourth.1 config -activebackground red button $fourth.2 -text Go -command Run $fourth.2 config -activebackground green button $fourth.3 -text Clear -command Clear $fourth.3 config -activebackground blue pack $fourth.1 $fourth.2 $fourth.3 -side left pack $fourth
November 26, 2002 Tcl/Tk: An Introduction 24
Example: (Cont)
# frame for display area frame .msg -borderwidth 2 set box [text .msg.box -width 60 -height 10 \ -borderwidth 1 -relief raised -setgrid true \ -yscrollcommand {.msg.yscroll set} \ -xscrollcommand {.msg.xscroll set}] scrollbar .msg.yscroll -command {.msg.box yview} \ -orient vertical scrollbar .msg.xscroll -command {.msg.box xview} \ -orient horizontal pack .msg.yscroll -side right -fill y pack .msg.xscroll -side bottom -fill x pack .msg.box -side left -fill both -expand true pack .msg -side top -fill both -expand true
November 26, 2002 Tcl/Tk: An Introduction
25
Example: (Cont)
# for change colars .msg.box tag configure TagA -foreground red .msg.box tag configure TagB -foreground blue
# when user click exit button proc Exit {} { set picked [tk_messageBox -type yesno \ -message "Really Quit?" \ -default no \ -icon question] if {$picked == "yes"} { exit } } November 26, 2002 Tcl/Tk: An Introduction
26
Example: (Cont)
# when user click go button proc Run {} { global box name1 name2 cFlag wFlag input if {$wFlag == 1 && $cFlag == 1} { set cmd "diff $name1 $name2 -c -w" } elseif {$wFlag == 1 && $cFlag == 0} { set cmd "diff $name1 $name2 -w" } elseif {$wFlag == 0 && $cFlag == 1} { set cmd "diff $name1 $name2 -c" } else { set cmd "diff $name1 $name2 } if [catch {open "|$cmd |& cat"} input] { $box insert end $input\n } else { fileevent $input readable Log $box insert end $cmd\n } Tcl/Tk: An Introduction } November 26, 2002
27
Example: (Cont)
# function for write a log to display area proc Log {} { global input box if [eof $input] { Stop } else { gets $input line if [regexp "^<" $line matches] { $box insert end $line\n TagA } elseif [regexp "^>" $line matches] { $box insert end $line\n TagB } else { $box insert end $line\n } $box see end } November 26, 2002 Tcl/Tk: An Introduction }
28
Example: (Cont)
# when input file is end of file proc Stop {} { global input box catch {close $input} }
# clear the display area proc Clear {} { global box $box delete 1.0 end }
Tcl/Tk: An Introduction
29
Example: Run
Tcl/Tk: An Introduction
30
Example: Output
Tcl/Tk: An Introduction
31