Re: Aligning in a Table




On Jul 18, 2008, at 5:40 PM, Dominik wrote:

Hi all,

I'm sure this is easy to answer, but I'm trying to get back into coding, and specifically GTK2-Perl.

I have a table setup with various widgets in each. What I would like to do is align, say the menubar, to the top of the cell, without having all the gaps in between. Attached is a screenshot of what I mean. I think I would have to use Alignment, but I'm not sure, looking through some other people's code I wasn't able to find anything. Ideally, I would like the center table to take up all the space that the Menubar and Statusbar widgets do not use. And having those two widgets aligned at the top (Menubar) and bottom (Statusbar).

Any help would be greatly appreciated.

I think what you're looking for are "packing properties", like "expand" and "fill".

http://library.gnome.org/devel/gtk/stable/gtk-Standard-Enumerations.html#GtkAttachOptions

GTK_EXPAND the widget should expand to take up any extra space in its container that has been allocated.

GTK_SHRINK   the widget should shrink as and when possible.

GTK_FILL    the widget should fill the space allocated to it.



For the basic layout you created in the screenshot, menubar, content area, and statusbar, you really only want the content area to have the "expand" and "fill" properties.

    my $table = Gtk2::Table->new (3, 1);

    $table->pack_start ($menubar, 0, 1, 0, 1, [], [], 0, 0);
$table->pack_start ($contents, 0, 1, 1, 2, [qw(expand fill)], [qw(expand fill)], 0, 0);
    $table->pack_start ($statusbar, 0, 1, 2, 3, [], [], 0, 0);



One-column tables are a bit silly, though. You also can create that layout a bit more easily with a vertical box, like this:

    my $vbox = Gtk2::VBox->new ();

    # pack menu bar first, with "expand" and "fill" set to false.
    $vbox->pack_start ($menubar, FALSE, FALSE, 0);

# next, the content area expands to take all remaining vertical space.
    $vbox->pack_start ($contents, TRUE, TRUE, 0);

    # finally, the status bar, packed just like the menu bar.
    $vbox->pack_start ($statusbar, FALSE, FALSE, 0);


This stuff is described in the gtk+ tutorial, but i find it's best to play around with these options in the glade UI designer to get a feel for what they do.

Here's the "Packing Widgets" section of the gtk2-perl tutorial:
http://gtk2-perl.sourceforge.net/doc/gtk2-perl-tut/ch-PackingWidgets.html

and the original C version for comparison.
http://library.gnome.org/devel/gtk-tutorial/stable/c355.html


--
If the monkey could type one keystroke every nanosecond, the expected waiting time until the monkey types out Hamlet is so long that the estimated age of the universe is insignificant by comparison ... this is not a practical method for writing plays.
  -- Gian-Carlo Rota





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]