Seite 1 von 1

Fehler: AttributeError: 'str' object has no attribute 'get'

Verfasst: Sonntag 31. Juli 2005, 12:55
von Gast
Hallo Leute, habe einen Fehler in diesem Programm mit dem get Befehl:

Code: Alles auswählen

from time import*
from winsound import*
from Tkinter import*
def Start(Button):
    fenster = Tk()
    fenster.deiconify() 
    fenster.title('Vorlesen')
    S = Entry(fenster)
    Button = Button(fenster,
                        text='Text vorlesen', command=Lesen)
    S.pack(padx=10, pady=10)
    Button.pack(pady=10)
    fenster.mainloop()
def Lesen():
    global S
    S=(S)
    S = S.get()
    for c in S:
        if c=="A":
            PlaySound('A.wav',1)
            sleep(0.4)
        if c=="B":
            PlaySound('B.wav',1)
            sleep(0.4)
        if c==" ":
            sleep(1)
        if c=="C":
            PlaySound('C.wav',1)
            sleep(0.4)
        if c=="D":
            PlaySound('D.wav',1)
            sleep(0.4)
        if c=="Z":
            PlaySound('Z.wav',1)
            sleep(0.4)
Start(Button)

Verfasst: Sonntag 31. Juli 2005, 13:10
von Leonidas
Ich habe deinen Code in Python Tags gesetzt und frage mich warum du immer alles aus einem Modul in deinen aktuellen Namensraum importierst?

Re: Fehler: AttributeError: 'str' object has no attribute '

Verfasst: Sonntag 31. Juli 2005, 19:46
von gerold
Anonymous hat geschrieben:Hallo Leute, habe einen Fehler in diesem Programm mit dem get Befehl:
Hi!

Du verwendest das Schlüsselwort global falsch. Wenn, dann müsste es in der Funktion start eingesetzt werden. Was soll eingentlich die Zeile mit S = (S)? Ich glaube, du solltest das komplette Programm neu überdenken.

Das soll jetzt nicht bedeuten, dass mein Beispiel absolut super ist, aber so hätte ich es geschrieben (vorausgesetzt ich habe verstanden, was du mit dem Programm eigentlich bewirken möchtest):

Code: Alles auswählen

import time
#import winsound
import Tkinter


#----------------------------------------------------------------------
class SoundPlayer(Tkinter.Tk):
    
    #----------------------------------------------------------------------
    def __init__(self):
        Tkinter.Tk.__init__(self)
        self.title("Vorlesen")
        
        # A
        self.chk_a_var = Tkinter.StringVar()
        self.chk_a = Tkinter.Checkbutton(
            text = "Lied A",
            variable = self.chk_a_var,
            onvalue = "1",
            offvalue = "0"
        )
        self.chk_a.pack()
        # B
        self.chk_b_var = Tkinter.StringVar()
        self.chk_b = Tkinter.Checkbutton(
            text = "Lied B",
            variable = self.chk_b_var,
            onvalue = "1",
            offvalue = "0"
        )
        self.chk_b.pack()
        
        # Button
        self.btn_vorlesen = Tkinter.Button(
            text="Text vorlesen",
            command=self.lesen
        )
        self.btn_vorlesen.pack(padx=10, pady=10)
    
    #----------------------------------------------------------------------
    def lesen(self):
        if self.chk_a_var.get() == "1":
            print "Play Sound A"
            time.sleep(0.4)
        if self.chk_b_var.get() == "1":
            print "Play Sound B"
            time.sleep(0.4)

#----------------------------------------------------------------------
if __name__ == "__main__":
    sound_player = SoundPlayer()
    sound_player.mainloop()
mfg
Gerold
:-)

Verfasst: Mittwoch 3. August 2005, 11:31
von Gast
HAllo,
Die Zeile mit S = (S) ist mir beim kopieren versehentlich mit reingerutscht.
Ich wollte mich erstmal für den Vorschlag von Anonymous bedanken.
Danke!Danke!Danke!Danke!Danke!Danke!Danke!Danke!Danke!Danke!
Ich meinte es aber ein bisschen anders und zwar wollte ich ein Text-Widget, dessen inhalt in die einzelnen Buchstaben zerlegt wird vorlesen lassen.Ist in dem Text-Widget z.B. das Wort "Hallo" soll das Programm die Wave-Datein "H","A","L","L" und "O" wiedergegeben.
Ich freue mich schon über weitere Tipps.

Verfasst: Mittwoch 3. August 2005, 12:19
von gerold
Anonymous hat geschrieben: und zwar wollte ich ein Text-Widget, dessen inhalt in die einzelnen Buchstaben zerlegt wird vorlesen lassen.Ist in dem Text-Widget z.B. das Wort "Hallo" soll das Programm die Wave-Datein "H","A","L","L" und "O" wiedergegeben.
Hi!

Wenns weiter nichts ist... :-)

Code: Alles auswählen

import time
#import winsound
import Tkinter


#----------------------------------------------------------------------
class SoundPlayer(Tkinter.Tk):
   
    #----------------------------------------------------------------------
    def __init__(self):
        Tkinter.Tk.__init__(self)
        self.title("Vorlesen")
       
        # Entry
        self.e_textfeld = Tkinter.Entry()
        self.e_textfeld.pack(padx=10, pady=10)
       
        # Button
        self.btn_vorlesen = Tkinter.Button(
            text="Text vorlesen",
            command=self.lesen
        )
        self.btn_vorlesen.pack(padx=10, pady=10)
   
    #----------------------------------------------------------------------
    def lesen(self):
        text = self.e_textfeld.get()
        if text:
            for item in text:
                print "Vorzulesender Buchstabe:", item
                time.sleep(0.4)
        else:
            print "Nichts vorzulesen"


#----------------------------------------------------------------------
if __name__ == "__main__":
    sound_player = SoundPlayer()
    Tkinter.mainloop()
mfg
Gerold
:-)

Verfasst: Mittwoch 3. August 2005, 12:39
von Gast
Ich danke für die schnelle Hilfe! :D
War genau das,was ich gemint habe.