48 lines
1.4 KiB
Plaintext
48 lines
1.4 KiB
Plaintext
using Tk
|
|
w = Toplevel("Component Interaction Example")
|
|
fr = Frame(w)
|
|
pack(fr, {:expand=>true, :fill => "both"})
|
|
## The task: For a minimal "application", write a program that
|
|
## presents a form with three components to the user: A numeric input
|
|
## field ("Value") and two buttons ("increment" and "random").
|
|
|
|
value = Entry(fr, "")
|
|
increment = Button(fr, "Increment")
|
|
random = Button(fr, "Random")
|
|
|
|
formlayout(value, "Value:")
|
|
formlayout(increment, " ")
|
|
formlayout(random, " ")
|
|
|
|
set_value(value, "0") ## The field is initialized to zero.
|
|
|
|
tk_bind(increment, "command") do path ## increment its value with the "increment" button.
|
|
val = get_value(value) | float
|
|
set_value(value, string(val + 1))
|
|
end
|
|
|
|
|
|
function validate_command(path, P)
|
|
try
|
|
if length(P) > 0 parsefloat(P) end
|
|
tcl("expr", "TRUE")
|
|
catch e
|
|
tcl("expr", "FALSE")
|
|
end
|
|
end
|
|
function invalid_command(path, W)
|
|
println("Invalid value")
|
|
tcl(W, "delete", "@0", "end")
|
|
end
|
|
|
|
tk_configure(value, {:validate=>"key", :validatecommand=>validate_command, :invalidcommand=>invalid_command })
|
|
|
|
## Pressing the "random" button presents a confirmation dialog, and resets the field's value to a random value if the answer is "Yes".
|
|
tk_bind(random, "command") do path
|
|
out = Messagebox(w, "Randomize input", "Select a new random number?")
|
|
if out == "ok"
|
|
new_value = floor(100*rand(1))[1]
|
|
set_value(value, string(new_value))
|
|
end
|
|
end
|