web-dev-qa-db-ja.com

このAttributeErrorを理解しないでください:「str」オブジェクトには属性「text」がありません

ウィンドウに実行中のテキストを表示できるアプリケーションを作成していますが、OOPの解析を開始したばかりで、このエラーを修正する方法を知りたいです...必要に応じて機能する例もあります。スクリプトの下にエラーが表示されます。

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

これが例であり、必要に応じて機能します。

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
_AttributeError:'str' object has no attribute 'text', tkinter
_

これは、コードのどこかに、その.text()メソッドを呼び出そうとしているstrオブジェクトがあることを意味します。
strオブジェクトには.text()メソッドがないため、そのエラーが発生します。

これを解決するには、変数タイプを確認してください。strオブジェクトではなく、.text()メソッドを持つオブジェクトを使用する必要があります。

1
ycx

私はこれがあなたが望むものだと思います:

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

これはあなたが望むように結果をもたらし、あなたのコードとして書かれます。

0
Partho63