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

Fragen zu Tkinter.
Antworten
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)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich habe deinen Code in Python Tags gesetzt und frage mich warum du immer alles aus einem Modul in deinen aktuellen Namensraum importierst?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
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.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Gast

Ich danke für die schnelle Hilfe! :D
War genau das,was ich gemint habe.
Antworten