Problème d'enregistrement de texte sur le widget Text()
Bonsoir,
Je suis débutant en Python et pour m'entrainer je code un petit pseudo Bloc-note.
Mon problème se situe au moment d'enregistrer le fichier en effet quand j'utilise la méthode get() du widget Text(),
python me relève cette erreur :
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.2032.0_x64__qbz5n2kfra8p0\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
File "C:\Users\showtek\Desktop\projet1\objet.py", line 86, in save_as
self.text = self.text.get("1.0", END)
AttributeError: 'str' object has no attribute 'get'
Je ne comprend pas pourquoi car j'ai testé avec l'interpréteur python et cela marche sans problème sauf que là,
je ne sais pas pourquoi mon objet Text est convertie en string.
Cela fait des jours que je cherche une solution, sur stack overflow , sur les forums , la documentation etc.. mais aucune réponse à mon problème.
Voici mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
| #-*-coding: Utf-8-*-
from tkinter import *
from tkinter.filedialog import *
import os
from os.path import * # pour récupèrer le nom des fichiers.
class Note():
"""classe pour créer notre GUI"""
def __init__(self):
self.win = Tk()
self.win.title("NoteBook") # titre de l'application
self.win.geometry("500x500") # taille de l'application
self.win.iconbitmap('icone.ico') # logo de l'application
# barre de menu
self.mainmenu = Menu(self.win)
# menu option
self.option = Menu(self.mainmenu)
self.option.add_command(label="nouveau", command=self.new_windows)
self.option.add_command(label="ouvrir", command=self.open)
# ajoute du menu à menubar.
self.mainmenu.add_cascade(label="option", menu=self.option)
# affichage du menu
self.win.config(menu=self.mainmenu)
def run(self):
"""boucle pour lancer la fenêtre."""
self.win.mainloop()
def new_windows(self):
"""commande nouvelle fenêtre"""
self.windows = Toplevel(self.win) # nouvelle fenêtre
self.windows.title("nouveau")
self.windows.geometry("500x500") # taille interface
self.windows.iconbitmap('icone.ico')
# affichage du menu
self.windows.config(menu=self.menubar)
# création d'un widget pour éditer du texte.
self.text = Text(self.windows,height=500, width=500)
self.text.bind('<Control-KeyPress-s>',self.save_as)
self.text.pack() # affichage du widget
def open(self):
fichier = askopenfile(filetypes=[("Text Files", "*.txt")]) # ouverture d'un fichier
txt = fichier.read() # on range le texte du fichier dans une variable.
titre = basename(fichier.name) # os.basename récupère le nom du fichier
# grâce à son attribut name qui donne le chemin.
# nouvelle fenêtre dans le widget parent.
self.windows = Toplevel(self.win)
self.windows.title(titre) # on utilise la variable titre.
self.windows.geometry("500x500") # taille interface
self.windows.iconbitmap('icone.ico') # logo de l'interface
# affichage du menu
self.windows.config(menu=self.menubar)
# création d'un widget pour éditer du texte.
self.text = Text(self.windows,height=500, width=500)
self.text.insert("1.0", txt) #affichage du texte du fichier.
self.text.bind('<Control-KeyPress-S>',self.new_text)
self.text.pack() # affichage du widgets
def save_as(self, event):
"""commande pour enregistrer-sous"""
self.text = self.text.get("1.0", END)
self.text.asksaveasfilename(filetype=[("*.txt")])
def menubar(self):
"""méthode créer une barre de menu."""
self.menubar = Menu(self.windows)
# menu option
self.option = Menu(self.menubar)
self.option.add_command(label="nouveau", command=self.new_windows)
self.option.add_command(label="ouvrir", command=self.open)
self.option.add_command(label="Enregistrer sous")
self.option.add_command(label="supprimer")
# ajout du menu option à menubar.
self.menubar.add_cascade(label="option", menu=self.option) |
Merci pour votre aides :)