Tk::Tcl-perl man page on BSDi

Man page or keyword search:  
man Server   6284 pages
apropos Keyword Search (all sections)
Output format
BSDi logo
[printable version]



TCL-PERL(1)	      perl/Tk Documentation	      TCL-PERL(1)

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.

25/Aug/1997		    Tk400.202				1

TCL-PERL(1)	      perl/Tk Documentation	      TCL-PERL(1)

	 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", ...);

25/Aug/1997		    Tk400.202				2

TCL-PERL(1)	      perl/Tk Documentation	      TCL-PERL(1)

	 $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).

25/Aug/1997		    Tk400.202				3

TCL-PERL(1)	      perl/Tk Documentation	      TCL-PERL(1)

	 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");
		       });

25/Aug/1997		    Tk400.202				4

TCL-PERL(1)	      perl/Tk Documentation	      TCL-PERL(1)

	 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.

25/Aug/1997		    Tk400.202				5

[top]

List of man pages available for BSDi

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