On Sep 2, 2009, at 12:44 , Konovalov, Vadim (Vadim)** CTR ** wrote:

From: Michael Carman [mailto:mjcar...@mchsi.com]
Does Tkx (or perhaps it would be Tcl.pm) support multiple mainwindows?
This doesn't complain, but even though $x and $y have different
addresses they refer to the same Tk widget.

   my $x = Tkx::widget->new('.');
   my $y = Tkx::widget->new('.');

That's not surprising since they have the same name. Methods like
_parent() and _kid() exploit this to "retrieve" the widget reference
from the Tcl name. Giving $x and $y different Tcl names doesn't appear to be an option, either. Most of my attempts ended in "bad window path
name" errors. While there are lots of examples of using '.'
as the name
of the root window and it appears to be a requirement, the
documentation
never actually explains it.

It looks like multiple mainwindows are not possible, in which
case I can
safely ignore that aspect of the Tk behavior. Is this true?

In my vision, in tcl/tk world there is only one mainwindow (a toplevel with path '.'), but this is per interpreter.

With tk-enabled Tcl.pm you could do

my $interp2 = $interp1->interp('create');
and have another mainwindow for $interp2.

Dealing with multiple interpreters seems like a pain to me. Multiple toplevels is the way to go.

As it seems to me, the Tkx package creates only one tcl interpreter within Tkx::i package and does not expose it to the user. So it seems to me that seconf interpreter is not possible for Tkx, but could be possible with a minor modifications to Tkx.

I would think that Tkx::interp_create("slavename") will allow you to create multiple interpreters from Tkx. I have not tried to use this myself. I never felt the need.

On the contrary, in Tcl::Tk any widget has "interp" method, which gives you an instance to widget's interpreter, so it is possible to create another one, but I never used that feature, may be it is never needed...

Which makes me wonder - is my understanding true, that in Tkx a user is not allowed to do tcl/tk's evals?

Tkx::eval() works fine since "eval" is a Tcl command too.

--Gisle

IMO, this is a really nice feature! Really powerful!

Best regards,
Vadim.

Reply via email to