[Richard Suchenwirth] - As yet another midnight project, here's a small calculator in Tcl/Tk. Known problem: arithmetics is done with ''expr'', so e.g. ''1/2='' comes out as 0. When dividing, you should mark at least one operand as double by appending a period. Then again, in addition to the buttons you can use any of expr's other functionalities via keyboard input. wm title . Calculator grid [entry .e -textvar e -just right] -columnspan 5 bind .e = set n 0 foreach row { {7 8 9 + -} {4 5 6 * /} {1 2 3 ( )} {C 0 . = } } { foreach key $row { switch -- $key { = {set cmd =} C {set cmd {set clear 1; set e ""}} default {set cmd "hit $key"} } lappend keys [button .[incr n] -text $key -command $cmd] } eval grid $keys -sticky we ;#-padx 1 -pady 1 set keys [list] } grid .$n -columnspan 2 ;# make last key (=) double wide proc = {} { regsub { =.+} $::e "" ::e ;# maybe clear previous result if [catch {lappend ::e = [set ::res [expr $::e]]}] { .e config -fg red } .e xview end set ::clear 1 } proc hit {key} { if $::clear { set ::e "" if ![regexp {[0-9().]} $key] {set ::e $::res} .e config -fg black .e icursor end set ::clear 0 } .e insert end $key } set clear 0 focus .e ;# allow keyboard input wm resizable . 0 0 ---- [Arts and crafts of Tcl-Tk programming]