RosettaCodeData/Task/GUI-component-interaction/Tcl/gui-component-interaction.tcl

36 lines
1.1 KiB
Tcl

package require Tk
###--- Our data Model! ---###
# A single variable will do just fine
set field 0
###--- Lay out the GUI components in our View ---###
# We use the Ttk widget set here; it looks much better on Windows and OSX
# First, a quick hack to make things look even nicer
place [ttk::frame .bg] -relwidth 1 -relheight 1
# A labelled frame containing an entry field constrained to use numbers
pack [ttk::labelframe .val -text "Value"]
pack [ttk::entry .val.ue -textvariable field \
-validate key -invalidcommand bell \
-validatecommand {string is integer %P}]
# Now, a pair of buttons
pack [ttk::button .inc -text "increment" -command step]
pack [ttk::button .rnd -text "random" -command random]
###--- Now we define the behaviors, the Controller ---###
# How to respond to a click on the "increment" button
proc step {} {
global field
incr field
}
# How to respond to a click on the "random" button
proc random {} {
global field
if {[tk_messageBox -type yesno -parent . \
-message "Reset to random?"] eq "yes"} {
set field [expr {int(rand() * 5000)}]
}
}