Howto generate a metafunction? [Python 1.5.2]
Greg Ewing
see_reply_address at something.invalid
Tue Oct 15 18:01:06 EDT 2002
Kim Petersen wrote:
>
> class MListbox(Frame):
> def __init__(self,master,count=1,cnf={},**args):
> Frame.__init__(self,master,cnf)
> self.listboxes=[]
> for i in range(count):
> self.listboxes.append(Listbox(self,command=self._docommand))
> self.listboxes[-1].grid(row=0,column=i)
> self.yview=self.Metafun(Listbox.yview)
> self.yview_fraction=self.Metafun(Listbox.yview_fraction)
> ...
>
> def Metafun(self,fun):
> # How do i generate this one - to apply this function to every
> # element in self.listboxes?
It looks like you're trying to synchronise the scrolling of
several listboxes, right?
When I needed to do this a while ago, I created the
following class:
class ScrollMultiplexer:
def __init__(self):
self.clients = []
def add(self, c):
self.clients.append(c)
def xview(self, *args):
for c in self.clients:
apply(c.xview, args)
def yview(self, *args):
for c in self.clients:
apply(c.yview, args)
You would use it like this:
class MListbox(Frame):
def __init__(self,master,count=1,cnf={},**args):
Frame.__init__(self,master,cnf)
...
# Create a ScrollMultiplexer
mux = ScrollMultiplexer()
# Create a scroll bar and connect it to the ScrollMultiplexer
scrollbar = Scrollbar(self, orient = 'v', command = mux.yview)
...
for i in range(count):
listbox = Listbox(self,command=self._docommand)
self.listboxes.append(listbox)
# Add the listbox to the ScrollMultiplexer
mux.add(listbox)
...
# Finally, connect *one* of the listboxes back to the scroll bar
# (it doesn't matter which one)
self.listboxes[0].configure(yscrollcommand = self.scrollbar.set)
In other words, the ScrollMultiplexer sits in between
the scrollbar and the listboxes, pretending to be a
sort of fake listbox, distributing the scrolling
commands from the scrollbar to all the real
listboxes.
--
Greg Ewing, Computer Science Dept,
University of Canterbury,
Christchurch, New Zealand
http://www.cosc.canterbury.ac.nz/~greg
More information about the Python-list
mailing list