web-dev-qa-db-fra.com

Ne comprend pas ceci AttributeError: l'objet 'str' n'a pas d'attribut 'text'

Je suis en train de créer une application qui permettra d'afficher un texte en cours dans la fenêtre, mais je viens juste de commencer à analyser la POO, et j'aimerais savoir comment corriger cette erreur ... Il existe également un exemple qui fonctionne au besoin, il sera affiché sous le script avec une erreur.

class Main_Desktop():

    def __init__(self,parent,i,text):
        self.i=i
        self.parent=parent
        self.ticker=Text(parent,height=1,width=100)
        self.text=text
        self.ticker.pack()
        self.txt(i)

    def txt(self, i):
        i = 0
        self.text = ('' * 20) + self.text + ('' * 20)
        x = self.text[i:i + 20]
        self.ticker.insert("1.1", x)
        if i == len(self.text):
            i = 0
        else:
            i = i + 1
        self.ticker.after(100, lambda: Main_Desktop.txt(self.text[i:i + 20], i))

Voici un exemple et cela fonctionne selon les besoins:

root =Tk()
text="string"
text = (' '*20) + text + (' '*20)
ticker = Text(root, height=1, width=20)
ticker.pack()

i = 0
def command(x, i):
    ticker.insert("1.1", x)
    if i == len(text):i = 0
    else:i = i+1
    root.after(100, lambda:command(text[i:i+20], i))

command(text[i:i+20], i)
2
Philip Vasilevski
AttributeError:'str' object has no attribute 'text', tkinter

Cela signifie que quelque part dans votre code, vous avez un objet str sur lequel vous essayez d'appeler la méthode .text().
Comme votre objet str ne possède pas de méthode .text(), vous obtenez cette erreur. 

Pour résoudre ce problème, vérifiez vos types de variable, vous ne devriez pas utiliser d'objet str, mais plutôt un objet doté de la méthode .text().

1
ycx

Je pense que c'est ce que vous voulez:

from tkinter import *


class Main_Desktop():

    def __init__(self, parent, i, text):
        self.parent = parent
        self.i = i
        self.text = text
        self.ticker = Text(parent, height=1, width=20)
        self.text = (' ' * 20) + self.text + (' ' * 20)
        self.ticker.pack()
        self.txt(self.text[i:i + 20], i)

    def txt(self, x, i):

        self.ticker.insert("1.1", x)
        if i == len(self.text):
            i = 0
        else:
            i = i + 1
        self.parent.after(100, lambda: self.txt(self.text[i:i + 20], i))

root = Tk()
i = 0
text ="string"
app = Main_Desktop(root, i, text)
root.mainloop()

Cela résulte comme vous voulez et est écrit comme votre code.

0
Partho63