Here is the program; also in
library('tcltk/examples/ex1.pl')
:
:- use_module(library(tcltk)). go :- tk_new([name('Example 1')], Interp), tcl_eval(Interp, 'button .fred -text "hello world" -command { puts "hello world"}', _), tcl_eval(Interp, 'pack .fred', _), tk_main_loop.
To run it just start up SICStus (under Windows use sicstus, not
spwin), load the program, and evaluate the Prolog
goal go
. The first line of the go
clause calls
tk_new/2
, which creates a Tcl/Tk interpreter and returns a handle
Interp
through which Prolog will interact with the interpreter.
Next a call to tcl_eval/3
is made, which creates a button
displaying the `hello world' text. Next a call is made to
tcl_eval/3
that causes the button to be displayed in the main
application window. Finally, a call is make to tk_main_loop/0
that passes control to Tcl/Tk, making sure that window events are
serviced.
See how simple it is with just a three line Prolog program to create an application window and display a button in it. Click on the button and see what it does.
The reason you should use sicstus under Windows instead of
spwin is that the latter does not have the C standard
streams (stdin
,stdout
,stderr
) and the Tcl
command puts
will give an error if there is no stdout
.