introduction to tcl and tk outline –the tcl language –the tk toolkit –tk applications...

23
Introduction to Tcl and Tk Outline The Tcl Language The Tk Toolkit Tk Applications Composing Applications Status and Conclusions Goal Understand basics of Tcl and Tk Understand Tk/Tcl philosophy Reading Ch. 5-9, Practical Programming in Tcl and Tk

Post on 20-Dec-2015

251 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

Introduction to Tcl and Tk

Outline– The Tcl Language

– The Tk Toolkit

– Tk Applications

– Composing Applications

– Status and Conclusions

Goal– Understand basics of Tcl and Tk

– Understand Tk/Tcl philosophy

Reading– Ch. 5-9, Practical Programming in Tcl and Tk

Page 2: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

Overview

• What– Tcl: embeddable scripting language

– Tk: X11/Windows/Mac toolkit and widgets based on Tcl

• Principle– single interpretive language controls all aspects of all

interactive applications

» function

» interface

» composition of pieces

» communication between applications

• Results– higher- level graphics programming - simpler, 10X faster

– greater power - more programmable, programs work together

Page 3: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

Tcl: Tool Command Language

• Problem– interactive programs need command languages

– traditionally redone for each application

– result: weak, quirky

– Emacs and csh nice, but cannot reuse

• Solution: Tcl– command language = embeddable C library

– powerful features: procedures, variables, lists, expressions, loops, etc.

– extensible by applications

Page 4: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

Language Philosophy

• Language classes– large application implementation (structure,

performance important)

– scripting, extensions

– interactive commands (structure bad, performance not critical)

• One language can’t meet all three needs?

• Tcl goals– simple syntax (for humans)

– programmable

– easy to interpret

– simple interface to C/C++ procedures

C

Tcl

Page 5: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

Tcl Syntax

• Basic syntax like shells– words separated by spaces:

cmd arg arg arg . . .

– commands separated by newlines, semicolons

– commands return string results

• Simple substitution rules– variables:

set a $b

– command results:

set a [expr $b+2]

– complex arguments:

if $a<0 {

puts stdout “a is negative”

}

Page 6: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

More on the Tcl Language

• Rich set of built-in commands– variables, associative arrays, lists

– arithmetic expressions

– conditionals, looping

– procedures

– access to files, system commands

• Only data type is string– easy access from C/C++

– programs and data are interchangeable

Page 7: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

Example: Factorial

proc fac x {

if {$x<=1} {

return 1

}

expr {$x*[fac [expr $x-1]]}

}

fac 4

Returns: 24

Page 8: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

Embedding Tcl in Applications

Parser

Init

Command Loop

• Application generates Tcl scripts

• Tcl parses scripts, calls command procedures with argc, argv

• Application extends built-in command set– define new object types in C

– implement primitive operations on objects as new Tcl commands

– build complex features with Tcl scripts

Tcl Application

Built-In Commands Application Commands

Page 9: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

The Tk Toolkit

• Problem– too hard to build applications with nice user interfaces

• Wrong Solution– C++, object-oriented toolkits

– only 10-20% improvement, must still program at low level

• Right Solution– raise the level of GUI programming

– create interfaces by writing Tcl scripts

Page 10: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

Creating Interfaces with Tk

• Widgets/windows have path names

.dlg.quit

• Create widget with command named after class

button .dlg.quit -text Quit \

-foreground red -command exit

• Tell geometry manager where to display widget

place .dlg.quit -x 0 -y 0

pack .dlg.quit -side bottom

Page 11: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

Other Tk Features

• Manipulate widgets with widget commands

.dlg.quit flash

.dlg.quit configure -relief sunken

• Use Tcl for interconnection– buttons, menu entries invoke Tcl commands

– scrollbars and listboxes communicate with Tcl

– can define new event bindings in Tcl

– selection, focus accessible via Tcl

• Tk also provides C interfaces– create new widget classes

– create new geometry managers

Page 12: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

What’s a Tk-Based Application?

1. The Tcl interpreter

2. The Tk toolkit

3. Application-specific C code (primitives!)– new object types

– new widgets

4. Tcl scripts (compose primitives)– build GUI

– respond to events

Tcl commands

Page 13: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

Wish: Simplest Tk Application

• Wish - windowing shell

• No C code except command-line reader

• Can build many apps as wish scripts– Hello, world:

label .hello \

-text “Hello, world”

.pack .hello

– simple directory browser

» 30 lines of Tk/Tcl

Page 14: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

Browser Wish Script

listbox .list -yscroll “.scroll set” \-relief raised -width 20 -height 20

pack .list -side leftscrollbar .scroll -command “.list yview”pack .scroll -side right -fill y

if {$argc > 0} {set dir [lindex $argv 0]

} else {set dir “.”

}foreach i [exec ls -a $dir] {

.list insert end $i}bind .list <Double-Button-1> {

browse $dir [selection get]}bind .list <Control-c> {destroy .}focus .list

Page 15: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

Browse Script Cont.

proc browse {dir file} {global envif {$dir != “.”} {set file $dir/$file}if [file isdirectory $file] {

exec browse $file &} else {

if [file isfile $file] {exec $env(EDITOR) $file &

} else {puts stdout “can’t browse $file”

}}

}

• Browse is also name of wish script

Page 16: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

TkSol - Tk-Based Solitaire Program

Page 17: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

TkSol Statistics

• Code– 1635 lines of Tk/Tcl code

– 4 card down bitmaps

– 52 card up bitmaps (4 suits of 13 cards each)

– almost all time in bitmap creation

• Comparison to MS Solitaire– simpler end game

– has auto-play mode

– slower startup

– slower deal

– similar interactive speed

Page 18: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

TkMines Statistics

• Code– 1178 lines of Tk/Tcl code

– uses a few signal and time commands from TclX extension, are not really needed

– several small bitmaps for squares

• Comparison to MS Mines– simpler score file

– same look-and-feel

– slower startup

– similar interactive performance

Page 19: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

Composing Applications

• Problem– only communication between applications is via selection

» OLE on MS Windows provides object selection

– result: monolithic programs

• Solution - send command– send appName command

– any Tk application can invoke anything in any other Tk application: interface or actions

– result: powerful communication

– result: big security hole

Page 20: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

Composing Applications, cont.

• Examples– debugger - sends command to editor to highlight line of

execution

– UI editor - sends commands to modify interface of live application

– multimedia - send record, play commands to audio and video applications

– spreadsheets - cell sends commands to database to fetch current value

• Revolutionary results– build complex systems as collections of specialized but

reusable hypertools

– easy to create active objects: embeddable Tcl commands. Hypertext, hypermedia is easy.

Page 21: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

Status

• Source and documentation freely available– developed at UC Berkeley

– now maintained and developed at Sun Labs

– code redistributable in commercial applications

– runs on UNIX, Windows, Mac

• Large user/developer community– 50,000+ worldwide

– comp.lang.tcl newsgroup

– many commercial products

– several books

• Many extensions available– Tk is just one extension

Page 22: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

Drawbacks

• Must learn new language– substitution can be confusing

• Interpreted language has performance limits– want a compiler for some applications

– want to avoid C programming

– dynamic compiler will provide at least 10x speedup

• Competition– Visual Basic

– AppleScript

– Java/JavaScript

Page 23: Introduction to Tcl and Tk Outline –The Tcl Language –The Tk Toolkit –Tk Applications –Composing Applications –Status and Conclusions Goal –Understand

Conclusions

• High-level programming– less to learn

– easy to learn

– build applications very quickly

• One interpretive language for everything– extend and modify applications at run-time

– make many things work together

• Web programming/agent language?– platform independent

– interpreted

– easily embedded

– secure