⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mega.html

📁 perl教程
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<?xml version="1.0" ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<!-- saved from url=(0017)http://localhost/ -->
<script language="JavaScript" src="../../displayToc.js"></script>
<script language="JavaScript" src="../../tocParas.js"></script>
<script language="JavaScript" src="../../tocTab.js"></script>
<link rel="stylesheet" type="text/css" href="../../scineplex.css">
<title>Tk::mega - Perl/Tk support for writing widgets in pure Perl</title>
<link rel="stylesheet" href="../../Active.css" type="text/css" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rev="made" href="mailto:" />
</head>

<body>

<script>writelinks('__top__',2);</script>
<h1><a>Tk::mega - Perl/Tk support for writing widgets in pure Perl</a></h1>
<p><a name="__index__"></a></p>

<!-- INDEX BEGIN -->

<ul>

	<li><a href="#name">NAME</a></li>
	<li><a href="#synopsis">SYNOPSIS</a></li>
	<li><a href="#description">DESCRIPTION</a></li>
	<li><a href="#megawidget_support">MEGA-WIDGET SUPPORT</a></li>
	<ul>

		<li><a href="#advertise">Advertise</a></li>
		<li><a href="#callback">Callback</a></li>
		<li><a href="#classinit">ClassInit</a></li>
		<li><a href="#component">Component</a></li>
		<li><a href="#configspecs">ConfigSpecs</a></li>
		<li><a href="#construct">Construct</a></li>
		<li><a href="#createargs">CreateArgs</a></li>
		<li><a href="#delegates">Delegates</a></li>
		<li><a href="#initobject">InitObject</a></li>
		<li><a href="#ondestroy">OnDestroy</a></li>
		<li><a href="#populate">Populate</a></li>
		<li><a href="#privatedata">privateData</a></li>
		<li><a href="#subwidget">Subwidget</a></li>
	</ul>

	<li><a href="#pitfalls">PITFALLS</a></li>
	<li><a href="#missing">MISSING</a></li>
	<li><a href="#keywords">KEYWORDS</a></li>
	<li><a href="#see_also">SEE ALSO</a></li>
</ul>
<!-- INDEX END -->

<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>Tk::mega - Perl/Tk support for writing widgets in pure Perl</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<p>Define the widget's new class name:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<strong>package Tk::</strong><em>MyNewWidget</em>;</p>
<p>For composite widget classes:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<strong>use base qw/ Tk::container /</strong>; # where <strong>container</strong> is <em>Frame</em> or <em>Toplevel</em></p>
<p>For derived widget classes:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<strong>use base qw/ Tk::Derived Tk::DerivedWidget /;</strong></p>
<p>Install the new widget in Tk's namespace and establish class and instance
constructors.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<strong>Construct Tk::</strong><em>Widget</em> <em>'MyNewWidget'</em>;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<strong>sub ClassInit</strong> { <em>my ($self, $args) = @_; ...</em> }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<strong>sub Populate</strong> { <em>my ($self, $args) = @_; ...</em> }</p>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>The goal of the mega-widget support of Perl/Tk is to make it
easy to write mega-widgets that obey the same protocol and
interface that the Tk core widgets support.
<em>For mega-widget sample code please run the <strong>widget</strong> demonstration program and go to the section <strong>Sample Perl Mega-Widgets</strong>.</em></p>
<p>There are two kinds of mega-widgets:</p>
<ul>
<li><strong><a name="item_composite_widgets">Composite Widgets</a></strong>

<p>A composite widget is composed with one or more existing widgets.
The composite widget looks to the user like a simple single widget.
A well known example is the file selection box.</p>
</li>
<li><strong><a name="item_derived_widgets">Derived Widgets</a></strong>

<p>A derived widget adds/modifies/removes properties and methods
from a single widget (this widget may itself be a mega-widget).</p>
</li>
</ul>
<p>
</p>
<hr />
<h1><a name="megawidget_support">MEGA-WIDGET SUPPORT</a></h1>
<p>
</p>
<h2><a name="advertise">Advertise</a></h2>
<p>Give a subwidget a symbolic name.</p>
<p>Usage:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<em>$self</em>-&gt;<strong>Advertise</strong>(<strong>name</strong>=&gt;<em>$widget</em>);</p>
<p>Gives a subwidget <em>$widget</em> of the mega-widget <em>$self</em> the
name <strong>name</strong>.  One can retrieve the reference of an advertised subwidget
with the <a href="#subwidget">Subwidget</a> method.</p>
<p><strong>Comment:</strong> Mega-Widget Writers: Please make sure to document the
advertised widgets that are intended for <em>public</em> use.
If there are none, document this fact, e.g.:</p>
<pre>
        =head1 ADVERTISED WIDGETS</pre>
<pre>
        None.</pre>
<p>
</p>
<h2><a name="callback">Callback</a></h2>
<p>Invoke a callback specified with an option.</p>
<p>Usage:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<em>$self</em>-&gt;<strong>Callback</strong>(<em>-option</em> ?,<em>args</em> ...?);</p>
<p><strong>Callback</strong> executes the <a href="../../lib/Tk/callbacks.html">callback</a> defined with
<em>$self</em>-&gt;<strong>ConfigSpecs</strong>(<em>-option</em>, [<strong>CALLBACK</strong>, ...]);
If <em>args</em> are given they are passed to the callback. If
<em>-option</em> is not defined it does nothing.</p>
<p>
</p>
<h2><a name="classinit">ClassInit</a></h2>
<p>Initialization of the mega-widget class.</p>
<p>Usage:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<strong>sub ClassInit</strong> { <em>my ($class, $mw) = @_;</em> ...  }</p>
<p><strong>ClassInit</strong> is called once for <em>each</em> <a href="../../lib/Tk/MainWindow.html">MainWindow</a>
just before the first widget instance of a class is created in
the widget tree of <strong>MainWindow</strong>.</p>
<p><strong>ClassInit</strong> is often used to define bindings and/or other
resources shared by all instances, e.g., images.</p>
<p>Examples:</p>
<pre>
 <span class="variable">$mw</span><span class="operator">-&gt;</span><span class="keyword">bind</span><span class="operator">(</span><span class="variable">$class</span><span class="operator">,</span><span class="string">"&lt;Tab&gt;"</span><span class="operator">,</span> <span class="keyword">sub</span><span class="variable"> </span><span class="operator">{</span> <span class="keyword">my</span> <span class="variable">$w</span> <span class="operator">=</span> <span class="keyword">shift</span><span class="operator">;</span> <span class="variable">$w</span><span class="operator">-&gt;</span><span class="variable">Insert</span><span class="operator">(</span><span class="string">"\t"</span><span class="operator">);</span> <span class="variable">$w</span><span class="operator">-&gt;</span><span class="variable">focus</span><span class="operator">;</span> <span class="variable">$w</span><span class="operator">-&gt;</span><span class="variable">break</span><span class="operator">});</span>
 <span class="variable">$mw</span><span class="operator">-&gt;</span><span class="keyword">bind</span><span class="operator">(</span><span class="variable">$class</span><span class="operator">,</span><span class="string">"&lt;Return&gt;"</span><span class="operator">,</span> <span class="operator">[</span><span class="string">'Insert'</span><span class="operator">,</span><span class="string">"\n"</span><span class="operator">]</span><span class="operator">);</span>
 <span class="variable">$mw</span><span class="operator">-&gt;</span><span class="keyword">bind</span><span class="operator">(</span><span class="variable">$class</span><span class="operator">,</span><span class="string">"&lt;Delete&gt;"</span><span class="operator">,</span><span class="string">'Delete'</span><span class="operator">);</span>
</pre>
<p>Notice that <em>$class</em> is the class name (e.g. <strong>Tk::MyText</strong>) and <em>$mw</em> is the mainwindow.</p>
<p>Don't forget to call <em>$class</em>-&gt;<strong>SUPER::ClassInit($mw)</strong> in
<strong>ClassInit</strong>.</p>
<p>
</p>
<h2><a name="component">Component</a></h2>
<p>Convenience function to create subwidgets.</p>
<p>Usage:</p>
<pre>
    <span class="variable">$cw</span><span class="operator">-&gt;</span><span class="variable">Component</span><span class="operator">(</span><span class="string">'Whatever'</span><span class="operator">,</span> <span class="string">'AdvertisedName'</span><span class="operator">,</span>
        <span class="string">-delegate</span> <span class="operator">=&gt;</span> <span class="operator">[</span><span class="string">'method1'</span><span class="operator">,</span> <span class="string">'method2'</span><span class="operator">,</span> <span class="operator">...</span><span class="operator">]</span><span class="operator">,</span>
        <span class="operator">...</span> <span class="variable">more</span> <span class="variable">widget</span> <span class="variable">options</span> <span class="operator">...,</span>
    <span class="operator">);</span>
</pre>
<p><strong>Component</strong> does several things for you with one call:</p>
<p>o Creates the widget</p>
<p>o Advertises it with a given name (overridden by 'Name' option)</p>
<p>o Delegates a set of methods to this widget (optional)</p>
<p>Example:</p>
<pre>
    <span class="variable">$cw</span><span class="operator">-&gt;</span><span class="variable">Component</span><span class="operator">(</span><span class="string">'Button'</span><span class="operator">,</span> <span class="string">'quitButton'</span><span class="operator">,</span> <span class="string">-command</span> <span class="operator">=&gt;</span> <span class="keyword">sub</span><span class="operator">{</span><span class="variable">$mw</span><span class="operator">-&gt;</span>'<span class="variable">destroy</span><span class="string">'});
    </span>
</pre>
<p>
</p>
<h2><a name="configspecs">ConfigSpecs</a></h2>
<p>Defines options and their treatment</p>
<p>Usage:</p>
<pre>
    <span class="variable">$cw</span><span class="operator">-&gt;</span><span class="variable">ConfigSpecs</span><span class="operator">(</span>
        <span class="string">-option</span> <span class="operator">=&gt;</span> <span class="operator">[</span> <span class="variable">where</span><span class="operator">,</span> <span class="variable">dbname</span><span class="operator">,</span> <span class="variable">dbclass</span><span class="operator">,</span> <span class="variable">default</span><span class="operator">]</span><span class="operator">,</span>
        <span class="operator">...,</span>
        <span class="string">DEFAULT</span> <span class="operator">=&gt;</span> <span class="operator">[</span><span class="variable">where</span><span class="operator">]</span><span class="operator">,</span>
    <span class="operator">);</span>
</pre>
<p>Defines the options of a mega-widget and what actions
are triggered by configure/cget of an option
(see <a href="../../lib/Tk/ConfigSpecs.html">the Tk::ConfigSpecs manpage</a> and <a href="../../lib/Tk/Derived.html">the Tk::Derived manpage</a> for details).</p>
<p>
</p>
<h2><a name="construct">Construct</a></h2>
<p>Make the new mega-widget known to <strong>Tk</strong>.</p>
<p>Usage:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<strong>Construct</strong> <em>baseclass</em> <strong>'Name'</strong>;</p>
<p><strong>Construct</strong> declares the new widget class so that your mega-widget
works like normal Perl/Tk widgets.</p>
<p>Examples:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<strong>Construct Tk::Widget</strong> <em>'Whatever'</em>;
&nbsp;&nbsp;&nbsp;&nbsp;<strong>Construct Tk::Menu</strong>   <em>'MyItem'</em>;</p>
<p>First example lets one use <em>$widget</em>-&gt;<strong>Whatever</strong> to create
new <strong>Whatever</strong> widget.</p>
<p>The second example restricts the usage of the <strong>MyItem</strong> constructor
method to widgets that are derived from <strong>Menu</strong>:
<em>$isamenu</em>-&gt;<em>MyItem</em>.</p>
<p>
</p>
<h2><a name="createargs">CreateArgs</a></h2>
<p>Process options before any widget is created:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<strong>sub CreateArgs</strong> { <em>my ($package, $parent, $args) = @_; ...; return @newargs;</em> }</p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -