Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
744 connectés 

  FORUM HardWare.fr
  Programmation
  Python

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

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°373283
chaica
Posté le 27-04-2003 à 15:29:40  profilanswer
 

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
mood
Publicité
Posté le 27-04-2003 à 15:29:40  profilanswer
 

n°373285
kadreg
profil: Utilisateur
Posté le 27-04-2003 à 15:34:20  profilanswer
 

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 !
n°373290
chaica
Posté le 27-04-2003 à 15:38:16  profilanswer
 

oki merci.
 
CHaiCA

n°373299
chaica
Posté le 27-04-2003 à 15:55:55  profilanswer
 

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

n°373343
chaica
Posté le 27-04-2003 à 17:47:19  profilanswer
 

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

n°373349
Taz
bisounours-codeur
Posté le 27-04-2003 à 18:04:46  profilanswer
 

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

n°374841
lorill
Posté le 28-04-2003 à 16:44:16  profilanswer
 

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
n°374858
Taz
bisounours-codeur
Posté le 28-04-2003 à 16:50:34  profilanswer
 

elem!
 
 
vievement python 2.3 et son enumerate

n°375002
Kristoph
Posté le 28-04-2003 à 18:28:11  profilanswer
 

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 ;)

n°375023
chaica
Posté le 28-04-2003 à 18:59:16  profilanswer
 

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
mood
Publicité
Posté le 28-04-2003 à 18:59:16  profilanswer
 

n°375085
chaica
Posté le 28-04-2003 à 20:45:34  profilanswer
 

Up! :bounce:
 
CHaiCA

n°375148
chaica
Posté le 28-04-2003 à 22:11:13  profilanswer
 

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
n°375149
lorill
Posté le 28-04-2003 à 22:13:28  profilanswer
 

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

n°375155
chaica
Posté le 28-04-2003 à 22:20:11  profilanswer
 

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
n°375161
lorill
Posté le 28-04-2003 à 22:22:52  profilanswer
 

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

n°375177
chaica
Posté le 28-04-2003 à 22:34:21  profilanswer
 

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

n°375180
lorill
Posté le 28-04-2003 à 22:36:07  profilanswer
 

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, ...

n°375188
chaica
Posté le 28-04-2003 à 22:41:32  profilanswer
 

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

n°375190
lorill
Posté le 28-04-2003 à 22:41:39  profilanswer
 

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()

n°375193
lorill
Posté le 28-04-2003 à 22:42:32  profilanswer
 

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]

n°375200
chaica
Posté le 28-04-2003 à 22:46:49  profilanswer
 

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

n°375201
chaica
Posté le 28-04-2003 à 22:47:48  profilanswer
 

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

n°375206
lorill
Posté le 28-04-2003 à 22:48:38  profilanswer
 

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...

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

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

 

Sujets relatifs
[ Python ] Problème de docs[Python] Visibilité d'une variable
Acces port serie, comment faire, big probleme INSIDE !un probleme avec qt
[C] probleme avec fonction system()[ACCESS]Probleme activex suite a un changement de poste
Probleme de guillemet[C] Probleme fgets (resolu)
[ PHP / MySQL ] Auto_increment et INT(11) - Update : le pb est ailleur 
Plus de sujets relatifs à : [ Python ] Problème héritage # 4 (- update- )


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR