RosettaCodeData/Task/GUI-component-interaction/Julia/gui-component-interaction.j...

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