[ Python ] Problème héritage # 4 (- update- )

Problème héritage # 4 (- update- ) [ Python ] - Python - Programmation

Marsh Posté le 27-04-2003 à 15:29:40    

Code :
  1. for i in liste:
  2.   if ((string.find(liste[i],self.ent1.get())) != -1) and ((string.find(liste[i],self.ent2.get())) != -1):
  3.    del liste[i]

 
 
Et à l'execution ca me sort ca :
 

Citation :

 chaica@debian:~/progra/python/exos$ ./agenda.py
Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.2/lib-tk/Tkinter.py", line 1343, in __call__
    return apply(self.func, args)
  File "./agenda.py", line 165, in deleterPersonne
    if ((string.find(liste[i],self.ent1.get())) != -1) and ((string.find(liste[i],self.ent2.get())) != -1):
TypeError: sequence index must be integer

 
 
Je pige pas trop.
 
CHaiCA


Message édité par chaica le 28-04-2003 à 22:12:04
Reply

Marsh Posté le 27-04-2003 à 15:29:40   

Reply

Marsh Posté le 27-04-2003 à 15:34:20    

for i in liste te renvoit directement chacun des élément de la liste et pas juste un index, au lieu d'utiliser liste[i], utilise directement i.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 27-04-2003 à 15:38:16    

oki merci.
 
CHaiCA

Reply

Marsh Posté le 27-04-2003 à 15:55:55    

Le problème c'est que j'aurai voulu deleter la ligne qui correspond  au test de mon if et vu que for i in liste ne me retourne pas un index je suis un peu coincé.
 
CHaiCA

Reply

Marsh Posté le 27-04-2003 à 17:47:19    

Code :
  1. for i in range(len(liste)):
  2.   print i
  3.   if ((string.find(liste[i],self.ent1.get())) != -1) and ((string.find(liste[i],self.ent2.get())) != -1) :
  4.    del liste[i]

 
 

Citation :

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.2/lib-tk/Tkinter.py", line 1343, in __call__
    return apply(self.func, args)
  File "./agenda.py", line 168, in deleterPersonne
    if ((string.find(liste[i],self.ent1.get())) != -1) and ((string.find(liste[i],self.ent2.get())) != -1) :
IndexError: list index out of range

 
 
Décidemment je m'en sors pas...
 
CHaiCA

Reply

Marsh Posté le 27-04-2003 à 18:04:46    

ben si tu effaces, la taille de ta liste varie, il faut donc faire
 
 

i=0
while i < len(liste):
   if(truc):
     delete liste[i]
   else:
     i+=1 # on passe à l'élément suivant

Reply

Marsh Posté le 28-04-2003 à 16:44:16    

Code :
  1. for elem in liste:
  2.   if truc:
  3.     liste.remove(elem)


 
Edit: oops


Message édité par lorill le 28-04-2003 à 16:51:52
Reply

Marsh Posté le 28-04-2003 à 16:50:34    

elem!
 
 
vievement python 2.3 et son enumerate

Reply

Marsh Posté le 28-04-2003 à 18:28:11    

Et avec ca :
 

Code :
  1. >>> help(filter)
  2. Help on built-in function filter:
  3. filter(...)
  4.     filter(function or None, sequence) -> list, tuple, or string
  5.    
  6.     Return those items of sequence for which function(item) is true.  If
  7.     function is None, return the items that are true.  If sequence is a tuple
  8.     or string, return the same type, else return a list.


 
Toujours faire un tour dans la bibliotheque standard pour des fonctions basiques comme ca ;)

Reply

Marsh Posté le 28-04-2003 à 18:59:16    

Etant donné que mon code commencait à être un brin long, j'ai subdivisé en utilisant les modules mais apparemment j'ai un chtit problème.
Je précise que le code marche bien quand il est dans un seul fichier donc c'est lié aux liens entre modules.
 
 

Code :
  1. from fichs import *
  2. #
  3. #--- Classe Version : Gere le widget d'affichage du fichier version ---#
  4. #
  5. class Version(Frame):
  6. def __init__(self, boss= None):
  7.   Frame.__init__(self, borderwidth= 2)
  8.   self.fic4 = Fichier()
  9.   text1=self.fic4.lecture2()
  10.   Label(self, text=text1, fg="black" ).grid(row=0, column=0)

 
 
Dans le module fichs j'ai juste une classe fichier  
 
et il me sort ca  
 

Citation :

chaica@debian:~/progra/python/exos/split_ag$ ./agenda.py
Traceback (most recent call last):
  File "./agenda.py", line 74, in ?
    app = Application()
  File "./agenda.py", line 39, in __init__
    self.ver1 = Version(self)
  File "./vers.py", line 19, in __init__
    self.fic4 = Fichier()
NameError: global name 'Fichier' is not defined

 
 
si ca vous dit quelque chose... :)
 
CHaiCA


Message édité par chaica le 28-04-2003 à 19:00:05
Reply

Marsh Posté le 28-04-2003 à 18:59:16   

Reply

Marsh Posté le 28-04-2003 à 20:45:34    

Up! :bounce:
 
CHaiCA

Reply

Marsh Posté le 28-04-2003 à 22:11:13    

Bon j'ai résolu l'autre problème mais j'ai quelque chose qui m'ennuie car j'ai été obligé de mettre deux classes que je voulais séparer ensemble.
 
 

Code :
  1. class MenuBar(Frame):
  2. def __init__(self, boss= None):
  3.   Frame.__init__(self, borderwidth= 2)
  4.         .......
  5. def consulter(self):
  6.  app.basculerConsultation()
  7. def ajouter(self):
  8.  app.basculerAjout()
  9. def effacer(self):
  10.  app.basculerEffacement()
  11. def version(self):
  12.  app.basculerVersion()
  13. class Application(Frame):
  14. """Application principale"""
  15. def __init__(self, boss = None):
  16.  Frame.__init__(self)
  17.  self.master.title('Agenda en Python')
  18.  mBar = MenuBar(self)
  19.  mBar.grid(row=0, column=0, sticky=W)
  20.      .......
  21. if __name__ == '__main__':
  22. app = Application()
  23. app.master.minsize(300, 60)
  24. app.mainloop()

 
 
Parce que si je les séparais dans des modules diifférents les méthodes de MenuBar n'avait plus accès à l'objet app.
 
Je ne comprends pas bien pourquoi? Quelqu'un peut me donner la marche à suivre?
 
CHaiCA


Message édité par chaica le 28-04-2003 à 22:13:07
Reply

Marsh Posté le 28-04-2003 à 22:13:28    

chaica a écrit :


Parce que si je les séparais les méthodes de MenuBar n'avait plus accès à l'objet app.
 
Je ne comprends pas bien pourquoi? Quelqu'un peut me donner la marche à suivre?


je suppose que tu séparais entre la classe MenuBar et le reste ?
dans ce cas c'est parfaitement logique, app est défini dans le module du bas... donc inconnu dans celui du haut, sauf import qui va bien

Reply

Marsh Posté le 28-04-2003 à 22:20:11    

Ben en fait chaque classe est dans un module.
Sauf les deux que j'ai affiché que je n'arrive pas à séparer.
le module agenda contenait la présente classe agenda
 
je faisais donc from agenda import * mais l'interpréteur me signifiait que la classe MenuBar ne voyait pas l'objet app.
 
ChaiCA


Message édité par chaica le 28-04-2003 à 22:22:03
Reply

Marsh Posté le 28-04-2003 à 22:22:52    

app est local a ton bloc if a mon avis...
 
si tu mets un  
app = None devant le if __name__ == "__main__":, ca devrait aller

Reply

Marsh Posté le 28-04-2003 à 22:34:21    

Hélas non ca ne passe pas.
 
Parce que là ce que j'essaie de faire, c'est à partir d'un module atteindre un objet instancié dans un autre module, c'et possible ca? on ne peut pas que utiliser des classes ou des méthodes d'un module?
 
CHaiCA

Reply

Marsh Posté le 28-04-2003 à 22:36:07    

chaica a écrit :


Parce que là ce que j'essaie de faire, c'est à partir d'un module atteindre un objet instancié dans un autre module, c'et possible ca?  


encore heureux... parce qu'une méthode, ca n'est jamais qu'une instance d'objet...
 
sys.stdout par exemple, c'est une instance de fichier, ...

Reply

Marsh Posté le 28-04-2003 à 22:41:32    

Non ce n'est pas possible, je viens de faire un test + simple mais qui est semblable à ma situation :
 
Le module mod1.py :
 
 

Code :
  1. class Mod1:
  2. def afficher(self):
  3.  print "Salut les gnoux!!!!\n"
  4. global m1
  5. m1 = Mod1()

 
 
 
Le pro principal qui fait l'appel vers le module :
 
 

Code :
  1. #!/usr/bin/python
  2. from mod1 import *
  3. m1.afficher()

 
 
Et j'ai exactement la même erreur que dans mon programme actuel.
 
 

Citation :

chaica@debian:~/progra/python/exos$ ./exocModule.py
Traceback (most recent call last):
  File "./exocModule.py", line 6, in ?
    m1.afficher()
NameError: name 'm1' is not defined

 
 
ou alors il y a quelque chose qui m'échappe totalement :)
 
CHaiCA

Reply

Marsh Posté le 28-04-2003 à 22:41:39    

chaica a écrit :

Hélas non ca ne passe pas.


il rale parce que la méthode n'existe pas dans None (pensais pas que y'avait des verifs a ce moment), mais pas parce qu'il ne trouve pas la variable.
 
exemple :
 
toto.py

Code :
  1. from tata import *
  2. class Toto:
  3.   def method(self):
  4.     print tata.method()


 
tata.py

Code :
  1. class Tata:
  2.   def method(self):
  3.     return "je suis tata"
  4. tata = Tata()
  5. if __name__ == "__main__":
  6.   from toto import Toto
  7.   toto = Toto()
  8.   toto.method()

Reply

Marsh Posté le 28-04-2003 à 22:42:32    

chaica a écrit :

Non ce n'est pas possible, je viens de faire un test + simple mais qui est semblable à ma situation :


moi aussi, mais le mien marche  [:sinclaire]

Reply

Marsh Posté le 28-04-2003 à 22:46:49    

Mais le tien je comprends qu'il marche car toto est instancié dans ton prog principal alors que dans le mien il est instancié dans le module.
 
Chez toi toto.py est le module et tata.py le prog principal, mon prog n'est pas le même.
 
CHaiCA

Reply

Marsh Posté le 28-04-2003 à 22:47:48    

Mais c'est pas grave j'ai compris pourquoi ca marchait pas au moins, c'est ce que je voulais :)
 
CHaiCA

Reply

Marsh Posté le 28-04-2003 à 22:48:38    

chaica a écrit :

Mais le tien je comprends qu'il marche car toto est instancié dans ton prog principal alors que dans le mien il est instancié dans le module.


c'est dans l'autre sens qu'il faut lire...
dans toto.py, j'accede a la variable tata de tata.py, comme tu voudrais acceder a app défini dans le programme principal a partir de MenuBar...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed