36 lines
1.1 KiB
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)}]
|
|
}
|
|
}
|