On 01/-10/-28163 02:59 PM, Karim wrote:


Hello,

I implemented Observer DP on a listbox (Tkinter) as follows and I don't
understand why super() is not working and Observable.__init__(self) is
working, cf below:

class ListObservable(Listbox, Observable):
"""Creation de widget Listbox"""
def __init__(self):
super(ListObservable, self).__init__()
#Observable.__init__(self)
self._value = None
self.listeContenu = StringVar()
self.listeContenu.set(' '.join(sorted(data_base.keys())))
self.liste = Listbox(listvariable=self.listeContenu, selectmode='single')
self.liste.grid(row=0, column=1, sticky=N+S+W)
self.liste.bind('<Button-1>', self.onSelect)

_The error is:_
Traceback (most recent call last):
File "./observerAppliGraphique.py", line 118, in <module>
app=App()
File "./observerAppliGraphique.py", line 37, in __init__
self.sujet.attach(self.nom)
File "/home/karim/guiObserver/observable.py", line 11, in attach
self._observers.append(observer)
AttributeError: 'ListObservable' object has no attribute '_observers'

And the Observable class is:

class Observable(object):
"""Sujet a observer"""
def __init__(self):
self._observers = []
print('constructeur observable')

def attach(self, observer):
"""Attache un nouvel observateur"""
self._observers.append(observer)

def detach(self, observer):
"""Retire un nouvel observateur"""
self._observers.remove(observer)

def notify(self):
"""Avertit tous les observateurs que l'observable change d'etat"""
for observer in self._observers:
observer.update()

Just looking at what you supply, I'd suppose that ListBox doesn't correctly call super() in its own __init__() method.

So I took a look at Tkinter.py, and sure enough, it just calls its own direct parent, Widget.l

super() only works if all the classes you use are done consistently.

DaveA

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to