"""
Module PmwGroup.py
author Case Roole <cjr@bound.xs4all.nl>
"""
import string
import sys
import Tkinter
import Pmw
def aligngrouptags(groups):
"Set the 'ringunits' of the groups to one value."
maxunit = max( map( lambda x: x.ringunit, groups ) )
for group in groups:
group.setringunit(maxunit)
class Group( Pmw.MegaWidget ):
def __init__(self, parent = None, **kw):
# Define the megawidget options.
INITOPT = Pmw.INITOPT
optiondefs = (
('ring_borderwidth', 2, None),
('ring_relief', 'groove', None),
('ringpadx', 2, INITOPT),
('ringpady', 2, INITOPT),
)
self.defineoptions(kw, optiondefs)
# Initialise the base class (after defining the options).
Pmw.MegaWidget.__init__(self, parent)
# Create the components.
interior = Pmw.MegaWidget.interior(self)
self.oldInterior = interior
self._ring = self.createcomponent(
'ring',
(), None,
Tkinter.Frame, (interior,),
)
self._groupChildSite = self.createcomponent(
'groupchildsite',
(), None,
Tkinter.Frame, (self._ring,)
)
unit = self.ringunit = self.createtag(self.component('hull'))
padx = self['ringpadx']
pady = self['ringpady']
self._ring.grid(column = 1, row = 1, sticky = 'nsew')
interior.grid_columnconfigure(1, weight = 1)
interior.grid_columnconfigure(0, minsize = padx)
interior.grid_columnconfigure(2, minsize = padx)
interior.grid_rowconfigure(1, weight = 1)
interior.grid_rowconfigure(0, minsize = unit)
interior.grid_rowconfigure(2, minsize = pady)
self._groupChildSite.grid(column = 1, row = 1, sticky = 'nsew')
self._ring.grid_columnconfigure(1, weight = 1)
self._ring.grid_columnconfigure(0, minsize = padx)
self._ring.grid_columnconfigure(2, minsize = padx)
self._ring.grid_rowconfigure(1, weight = 1)
self._ring.grid_rowconfigure(0, minsize = unit)
self._ring.grid_rowconfigure(2, minsize = pady)
#self._ring.pack(padx=self['ringpadx'],
# pady=unit, expand=1,fill='both')
#self._groupChildSite.pack(padx=self['ringpadx'],
# pady=unit, expand=1,fill='both')
# Check keywords and initialise options.
self.initialiseoptions(Group)
def interior(self):
return self._groupChildSite
def createtag(self, parent ):
self.tag = self.createcomponent(
'tag',
(), None,
Tkinter.Label, (parent,),
)
if self.tag is None:
return self['ringpady']
unit = self.tag.winfo_reqheight()/2
self.tag.place(x=unit,y=unit,anchor='w')
return unit
def setringunit(self,unit):
self.ringunit = unit
self.oldInterior.grid_rowconfigure(0, minsize = unit)
self._ring.grid_rowconfigure(0, minsize = unit)
#self._ring.pack(pady=unit)
#self._groupChildSite.pack(pady=unit)
self.tag.place(x=unit,y=unit,anchor='w')