| [ Team LiB ] |
|
Choosing the Parent for PackingIn nearly all of the examples in this chapter, a widget is packed into its parent frame. In general, it is possible to pack a widget into any descendent of its parent. For example, the .a.b widget could be packed into .a, .a.c or .a.d.e.f. The -in packing option lets you specify an alternate packing parent. One motivation for this is that the frames introduced to get the arrangement right can cause cluttered names for important widgets. In Example 25-4 on page 398, the buttons have names like .one.alpha and .one.right.delta, which is not consistent. Here is an alternate implementation of the same example that simplifies the button names and gives the same result: Example 25-18 Packing into other relatives
# Create and pack two frames
frame .one -bg white
frame .two -width 100 -height 50 -bg grey50
# Create a row of buttons
foreach b {alpha beta} {
button .$b -text $b
pack .$b -in .one -side left
}
# Create a frame for two more buttons
frame .one.right
foreach b {delta epsilon} {
button .$b -text $b
pack .$b -in .one.right -side bottom
}
pack .one.right -side right
pack .one .two -side top
When you do this, remember that the order in which you create widgets is important. Create the frames first, then create the widgets. The stacking order for windows will cause the later windows to obscure the windows created first. The following is a common mistake because the frame obscures the button: button .a -text hello frame .b pack .a -in .b If you cannot avoid this problem scenario, then you can use the raise command to fix things up. Stacking order is also discussed on page 409. raise .a |
| [ Team LiB ] |
|