On 12/4/2009 5:24 PM, Alf P. Steinbach wrote:
Hi.
I discovered with tkinter the registration of widgets with layout
managers (tkinter "geometry" managers, e.g. calls to pack()) needs to be
done very hierarchically.
And this leads to hierarchical code, which would be nice to indicate by
indenting, but oops, indenting in Python is syntactically significant...
So first I thought of one routine per widget creation & layout
registration, but that was very ugly and verbose. Then thought of simply
using semicolons but I didn't even try that, because I imagined the
sheer ugliness. Then I sort of landed on the solution below, but
although using the language to define a kind of special purpose
mini-language is common in C++ and Lisp I haven't seen so much of that
in Python examples, and so I wonder whether this is Pythonic or perhaps
so extremely un-Pythonic (unconventional) that it's scary -- I mean,
calls that do nothing whatsoever, but I think of *visual structure* as
very important here and IMHO (disregarding Pythonicity issues) worth the
overhead...
maybe you can extend it a bit and make it more useful by auto-packing
the widget when the with-block ended. As for the case when you need to
pass arguments to the packer, perhaps the packing manager's argument
could be turned into an attribute like so:
import tkinter as tk
root = tk.Tk()
with Place(root, tk.Frame()) as display_area:
pic = tk.PhotoImage( file = "lightbulb_off.gif" )
with Pack(display_area, tk.Label) as pic_display:
pic_display.image = pic
# or perhaps just pic_display.side = "left"
pic_display.pack_side = "left"
with Pack(display_area, tk.Frame) as interaction_area:
interaction_area.width = 500
with Pack(interaction_area, tk.Label) as status_line:
status_line.text = "The switch is OFF"
status_line.pack_anchor = "w"
with Pack(interaction_area, tk.Button) as toggle_button:
toggle_button.text = " Toggle it "
toggle_button.pack_anchor = "w"
interaction_area.pack_side = "left"
display_area.place_relx = 0.5
display_area.place_rely = 0.5
display_area.place_anchor = "center"
something like this would make working with GUI much less painful...
--
http://mail.python.org/mailman/listinfo/python-list