If you look at a Tk reference manual (the one written for Perl/Tk, for
example), you'll notice that options for widgets are usually listed
with a hyphen---as a command-line option might be. In Perl/Tk,
options are passed to a widget in a
Hash
. You can do that in Ruby
as well, but you can also pass options using a code block; the name
of the option is used as a method name within the block and arguments to
the option appear as arguments to the method call. Widgets take a
parent as the first argument, followed by an optional hash of options
or the code block of options. Thus, the following two forms are
equivalent.
TkLabel.new(parent_widget) {
text 'Hello, World!'
pack('padx' => 5,
'pady' => 5,
'side' => 'left')
}
# or
TkLabel.new(parent_widget, text => 'Hello, World!').pack(...)
|
One small caution when using the code block form: the scope of
variables is not what you think it is. The block is actually evaluated
in the context of the widget's object, not the caller's. This means
that the caller's instance variables will not be available in the
block, but local variables from the enclosing scope and globals (not
that you ever use
those) will be. We'll show option passing
using both methods in the examples that follow.
Distances (as in the
padx
and
pady
options in these
examples) are assumed to be in pixels, but may be specified in
different units using one of the suffixes ``
c
'' (centimeter),
``
i
'' (inch), ``
m
'' (millimeter), or ``
p
'' (point).