Sie sind auf Seite 1von 31

Tcl/Tk: An introduction

D. Kim, K. Kundu, and M. Siegel November 26, 2002 CMSC 631

Tcl (Tool Control Language) history

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

November 26, 2002

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

7. ActiveState introduces Tcl support and services


8.1 Apr 8.3 Feb

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

November 26, 2002

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

November 26, 2002

3 Ways to Use Tcl/Tk


1.

tclsh for interactive use


$ tclsh % puts I am using tclsh
I am using tclsh

2.

wish for programs using the Tk package


Embed in C program with <tcl.h>

3.

November 26, 2002

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:

November 26, 2002

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]

November 26, 2002

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.

November 26, 2002

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

November 26, 2002

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

join list sep convert to string with separator


join {a b c} ", " a, b, c

Some list functions: lappend lindex,


linsert, llength, lrange
Tcl/Tk: An Introduction 10

November 26, 2002

Tcl Arrays

Tcl arrays are 'associative arrays': index is any string


set nicholas(1) 331 set nicholas(2) [expr $nicholas(1) + 300] array names nicholas

Matricies can be faked with index notation:


set A(1,1) 10 set A(1,2) 11 array names A

=>

1,1 1,2

(commas included in names!)


Tcl/Tk: An Introduction 11

November 26, 2002

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

November 26, 2002

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

November 26, 2002

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

November 26, 2002

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

November 26, 2002

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:

The Pack GM The Grid GM The Place GM


Tcl/Tk: An Introduction 16

November 26, 2002

Tk : A Small Example
#!/usr/local/bin/wish button .hello -text Hello -command {puts stdout "Hello World!"} pack .hello -padx 20 -pady 10

(code courtesy of Practical Programming in Tcl and Tk by Brent B. Welch)

November 26, 2002

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.

November 26, 2002

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

November 26, 2002

Example diff command


#!/usr/bin/wish
# Description : # this program will give the user a graphical interface to the Unix # command "diff". The window will allow the user to specify a pair # of files to check for differences and a few options, as well as # colorizing the output appropriately # title

wm title . tkdiff

November 26, 2002

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

November 26, 2002

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

November 26, 2002

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

November 26, 2002

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 }

November 26, 2002

Tcl/Tk: An Introduction

29

Example: Run

November 26, 2002

Tcl/Tk: An Introduction

30

Example: Output

November 26, 2002

Tcl/Tk: An Introduction

31

Das könnte Ihnen auch gefallen