Tk::Tcl-perl man page on HP-UX

Man page or keyword search:  
man Server   10987 pages
apropos Keyword Search (all sections)
Output format
HP-UX logo
[printable version]

Tcl-perl(3)	      User Contributed Perl Documentation	   Tcl-perl(3)

NAME
       Tcl vs perl - very old suspect documentation on porting.

DESCRIPTION
       This isn't really a .pod yet, nor is it Tcl vs perl it is a copy of
       John's comparison of Malcolm's original perl/Tk port with the current
       one. It is also out-of-date in places.

	 From: john@WPI.EDU (John Stoffel )

	 Here are some thoughts on the new Tk extension and how I think the
	 organization of the commands looks.  Mostly, I'm happy with it, it
	 makes some things more organized and more consistent with tcl/tk, but
	 since the overlying language is so different, I don't think we need to
	 follow exactly the tcl/tk model for how to call the language.

	 The basic structure of the Tk program is:

	     require Tk;

	     $top = MainWindow->new();

	     #
	     # create widgets
	     #

	     Tk::MainLoop;

	     sub method1 {
	     }

	     sub methodN {
	     }

	 This is pretty much the same as tkperl5a5, with some cosmetic naming
	 changes, and some more useful command name and usage changes.	A quick
	 comparison in no particular order follows:

	 tkperl5a5			       Tk
	 -------------------------------       -----------------------------------
	 $top=tkinit(name,display,sync);       $top=MainWindow->new();

	 tkpack $w, ... ;	       $w->pack(...)

	 $w = Class::new($top, ...);   $w = $top->Class(...);

	 tkmainloop;		       Tk::MainLoop;

	 tkbind($w,"<key>",sub);	       $w->bind("<key>",sub);

	 tkdelete($w, ...);	       $w->delete(...);

	 $w->scanmark(...);	       $w->scan("mark", ...);

	 $w->scandragto(...);	       $w->scan("dragto", ...);

	 $w->tkselect();		       $w->Select();

	 $w->selectadjust(...);		       $w->selection("adjust", ...);

	 $w->selectto(...);	       $w->selection("to", ...);

	 $w->selectfrom(...);	       $w->selection("from", ...);

	 $w->tkindex(...);	       $w->index(...);

	 tclcmd("xxx",...);		 &Tk::xxx(...)	  # all Tk commands, but no Tcl at all

	 tclcmd("winfo", xxx, $w, ...);	 $w->xxx(...);

				       $w->mark(...);

				       $w->tag(...);

	 $w->grabstatus();	       $w->grab("status");

	 $w->grabrelease(...);	       $w->grab("release", ...);

	 focus($w);		       $w->focus;

	 update();		       Tk->update();

	 idletasks();		       Tk->update("idletasks");

	 wm("cmd",$w, ...);	       $w->cmd(...);

	 destroy($w);		       $w->destroy();

				       Tk::option(...);
					 $w->OptionGet(name,Class)

				       $w->place(...)

				       Tk::property(...);

	 $w = Entry::new($parent,...)

	 is now

	 $w = $parent->Entry(...)

	 As this allows new to be inherited from a Window class.

	   -method=>x,-slave=>y

	  is now

	   -command => [x,y]

	 1st element of list is treated as "method" if y is an object reference.
	 (You can have -command => [a,b,c,d,e] too; b..e get passed as args).

	 Object references are now hashes rather than scalars and there
	 is only ever one such per window.  The Tcl_CmdInfo and PathName
	 are entries in the hash.

	 (This allows derived classes to
	 re-bless the hash and keep their on stuff in it too.)

	 Tk's "Tcl_Interp" is in fact a ref to "." window.
	 You can find all the Tk windows descended from it as their object
	 references get added (by PathName) into this hash.
	 $w->MainWindow returns this hash from any window.

	 I think that it should extend to multiple tkinits / Tk->news
	 with different Display's - if Tk code does.

	 Finally "bind" passes window as "extra" (or only)
	 argument. Thus

	 Tk::Button->bind(<Any-Enter>,"Enter");

	 Binds Enter events to Tk::Button::Enter by default
	 but gets called as $w->Enter so derived class of Button can just
	 define its own Enter method. &EvWref and associated globals and race
	 conditions are no longer needed.

	 One thing to beware of : commands bound to events with $widget->bind
	 follow same pattern, but get passed extra args :

	 $widget->bind(<Any-1>,[sub {print shift}, $one, $two ]);

	 When sub gets called it has :

	    $widget $one $two

	 passed.

	 1st extra arg is reference to the per-widget hash that serves as the
	 perl object for the widget.

	 Every time an XEvent a reference to a special class is placed
	 in the widget hash. It can be retrieved by $w->XEvent method.

	 The methods of the XEvent class are the
	 Tcl/Tk % special characters.

	 Thus:

	 $widget->bind(<Any-KeyPress>,
		       sub {
			my $w = shift;
			my $e = $w->XEvent;
			print $w->PathName," ",$e->A," pressed ,$e->xy,"\n");
		       });

	 XEvent->xy is a special case which returns "@" . $e->x . "," . $e->y
	 which is common in Text package.

	 Because of passing a blessed widget hash to "bound" subs they can be
	 bound to (possibly inherited) methods of the widget's class:

	 Class->bind(<Any-Down>,Down);

	 sub Class::Down
	 {
	  my $w = shift;
	  # handle down arrow
	 }

	 Also:

	 -command and friends can take a list the 1st element can be a ref to
	 as sub or a method name. Remaining elements are passed as args to the
	 sub at "invoke" time. Thus :

	 $b= $w->Button(blah blah, '-command' => [sub{print shift} , $fred ]);

	 Should do the trick, provided $fred is defined at time of button creation.

	 Thus 1st element of list is equivalent to Malcolm's -method and second
	 would be his -slave.  Any further elements are a bonus and avoid
	 having to pass ref to an array/hash as a slave.

perl v5.8.8			  2004-02-28			   Tcl-perl(3)
[top]

List of man pages available for HP-UX

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net