Vous êtes ici : Accueil / Forums & ML / Forums Python / Forum général Python / problème d'attribution à un d'objet

problème d'attribution à un d'objet

Remonter à Forum général Python
  • problème d'attribution à un d'objet

    Envoyé par polo42 le 6 Juillet 2007 à 15:42
    Bonjour,

    voila mon problème est le suivant. Je veux lire et écrire dans une fichier texte et pour cela j'e choisi de passer par le widget 'text' de Tkinter.

    Voici mon code, je pense qu'il y a plusieurs soucis mais étant débutant, je n'arrive pas à en venir à bout:
    [CODE]# -*- coding: UTF-8 -*-
    from Tkinter import *
    from os import *

    def ouvrir ():
    global fichier
    mon_txt = 'c:/'+ Entree.get()+'.txt'
    text1.configure(text = mon_txt)
    if os.path.isfile(mon_txt) == True:
    fichier = open(mon_txt, 'r')
    zonetext.configure(text = fichier)
    text1.configure(text = 'le fichier texte est chargé')
    if os.path.isfile(mon_txt) == False:
    fichier = open(mon_txt, 'w')
    text1.configure(text = 'le fichier texte est créer')

    def fermer ():
    global fichier
    enregistrer()
    fichier.close()
    fen1.destroy()

    def enregistrer():
    global fichier
    fichier.write(zonetext.get(0.0,END))

    fichier = ''
    mon_txt = ''
    fen1 = Tk()
    Entree = Entry(fen1, text='Indiquez le fichier à ouvrir ou créer')
    Entree.grid(row = 1, column =0)
    text1 = Label(fen1, text='')
    text1.grid(row = 0, column =0)
    bouton_ouvrir = Button(fen1, text = 'Ouvrir', command = ouvrir)
    bouton_ouvrir.grid(row = 1, column =1)
    bouton_fermer = Button(fen1, text ='Fermer', command = fermer)
    bouton_fermer.grid(row = 1, column =2)
    bouton_enregistrer = Button(fen1, text='enregistrer', command = enregistrer)
    bouton_enregistrer.grid(row = 1, column = 3)
    zonetext = Text(fen1, height = 400, width = 400)
    zonetext.grid(row =2, column =4, columnspan =4, padx=5, pady=5)
    fen1.mainloop()
    [/CODE]

    Voici l'erreur

    [CODE][COLOR="Red"]Exception in Tkinter callback
    Traceback (most recent call last):
    File "C:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__
    return self.func(*args)
    File "C:\Python25\traitement_text", line 9, in ouvrir
    if os.path.isfile(mon_txt) == True:
    NameError: global name 'os' is not defined
    Exception in Tkinter callback
    Traceback (most recent call last):
    File "C:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__
    return self.func(*args)
    File "C:\Python25\traitement_text", line 19, in fermer
    enregistrer()
    File "C:\Python25\traitement_text", line 25, in enregistrer
    fichier.write(zonetext.get(0.0,END))
    AttributeError: 'str' object has no attribute 'write'[/COLOR][/CODE]
    A priori, le problème viendrait de os.path.isfile(mon_txt) == True mais je ne sais pas comment faire autrement
    Merci d'avance
    • Re: problème d'attribution à un d'objet

      Envoyé par thiedlecques le 6 Juillet 2007 à 16:38
      Bonjour, pour tester l'existence d'un fichier,
      utilise ce code:

      try:
      fichier = open(mon_text, 'r') #mon_text doit être un chemin complet de fichier
      execept IOError:
      print "ce fichier n'existe pas, j'en crée donc un"
      fichier = open(mon_text, 'w')

      Si j'ai bien compris tu veux faire un petit éditeur de texte,
      utilise un widget askopenfilename pour selectionner ton fichier
      c'est plus pratique qu'une Entry
    • Re: problème d'attribution à un d'objet

      Envoyé par thiedlecques le 6 Juillet 2007 à 16:39
      oups ! il faut lire except et pas execept!!!
      sorry!
    • Re: problème d'attribution à un d'objet

      Envoyé par polo42 le 9 Juillet 2007 à 15:38
      Merci beaucoup pour cette réponse
      je vais essayer tout ça et je te tiens au courant.

      Cordialement polo
    • Re: problème d'attribution à un d'objet

      Envoyé par vvauchey le 9 Juillet 2007 à 17:06
      Heu, quelques petites remarques, tu initialises ton "fichier" comme une chaîne de caractère et âpres tu ten sert de "file object" (c'est ce que te renvoi la méthode open), si tu appelle la méthode enregistrer avant d'avoir ouvert, c'est normal que sa plante (dans ce cas la méthode open a pas était appelé a cause de ton premier crash).
      Petit conseil, hésite pas sur les try , except, finally :)

      Si tu fais un "from os import *" utilise plutôt "path.isfile(mon_txt) == True"
      Si tu fais un "import os" garde alors "os.path.isfile(mon_txt) == True"

      Il y a peut entre d'autre erreur, mais j'ai pas encore u le temps de regarder le détail.
      Cordialement
    • Re: problème d'attribution à un d'objet

      Envoyé par polo42 le 10 Juillet 2007 à 19:22
      Re bonjour,
      Etant un débutant en programmation et en python,
      j'apprecie beaucoup toutes vos réponses encore merci.
      J'ai encore quelques problèmes concernant cet algo et je suis bloqué.
      Je l'algo n'a pratiquement pas changé mias des problèmes subsistent.

      Traceback (most recent call last):
      File "E:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__
      return self.func(*args)
      File "E:\Documents and Settings\Administrateur\Bureau\traitement_text.py", line 14, in ouvrir
      fichier = open(mon_txt, 'w')
      TypeError: an integer is required
      Exception in Tkinter callback
      Traceback (most recent call last):
      File "E:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__
      return self.func(*args)
      File "E:\Documents and Settings\Administrateur\Bureau\traitement_text.py", line 19, in fermer
      enregistrer()
      File "E:\Documents and Settings\Administrateur\Bureau\traitement_text.py", line 25, in enregistrer
      fichier.write(zonetext.get(0.0, END))
      AttributeError: 'str' object has no attribute 'write'


      Merci pour vos réponse
    • Re: problème d'attribution à un d'objet

      Envoyé par vvauchey le 11 Juillet 2007 à 11:42
      Bonjour,
      je ne connais pas Tkinter et j'ai plus l'habitude d'utiliser des classes, méthode que des fonctions comme dans ton exemple, mais j'ai l'impression que sa vient du fait que tes variables ne sont pas connus dans ta fonction, à la manière de l'exemple suivant qui crash une erreur car « a » n'est pas connu
      a=1
      def toto():
      a=a+1
      print a
      toto()


      je me trompe peut être, mais essaye de passer tes variables en global.

      En tout cas il semblerai que tu envoi a la méthode open un paramètre qui lui plais pas, hésite donc pas a te faire des « print » et type() pour savoir ce que tu lui envoi exactement et remonter le problème jusqu 'a sa source.
      Sinon, la dernière erreur, sa semble être toujours la même, la méthode « write » est appelé sur un string et non pas sur un file object car ta méthode ouvrir a crashé.
      Cordialement
Rendu par Ploneboard