2016-05-14 13 views
-1

Versuchen, den Knopftext ändern zu lassen. Wenn die Schaltfläche über LBS verfügt, sollte sie durch Klicken auf die Schaltfläche in KGS geändert werden. Wenn die Schaltfläche über KGS verfügt, sollte sie durch Klicken auf die Schaltfläche in LBS geändert werden.wenn sonst, Knopf nicht funktioniert

Der Knopf tut nichts, aber der Code scheint mir richtig.

from Tkinter import * 

myGui=Tk() 
myGui.geometry("200x100") 
myGui.title("basicGUI") 
myGui.configure(bg="gray") 

def toggle(): 
    text = "LBS" 
    if text == LBS: 
     tglBtn.config(text = KGS) 
    else: 
     tglBtn.config(text = LBS) 

LBS = StringVar 
tglBtn = Button(text="LBS", 
       textvariable=LBS, 
       command=toggle) 
tglBtn.pack() 

mainloop() 
+0

Sie setzen 'Text' in' "LBS" 'jedes Mal, wenn Sie die Funktion ausführen, so wird es immer das gleiche tun. Sie möchten wahrscheinlich lesen, welchen Text die Schaltfläche enthält, oder besser noch, speichern Sie sie in einer Variablen als True/False und setzen Sie den Text dann abhängig vom Wert. – Peter

+0

keine Ahnung was du mir sagst. Ich bin neu bei Python, ich brauche einen besseren Hinweis bitte. – rasPi2bSarah

Antwort

1

Sie erstellen keine StringVar Objekt, wenn Sie Klammern hinzu: LBS = StringVar(). Der Name ist auch irreführend, weil die StringVar "LBS" oder "KGS" sein wird. Der ganze Sinn eines StringVar ist, dass der Text der Schaltfläche automatisch aktualisiert wird, wenn der StringVar seinen Wert ändert.

from Tkinter import * 

myGui=Tk() 
myGui.geometry("200x100") 
myGui.title("basicGUI") 
myGui.configure(bg="gray") 

def toggle(): 
    if buttonText.get() == "LBS": 
     buttonText.set("KGS") 
    else: 
     buttonText.set("LBS") 

buttonText = StringVar() 
buttonText.set("LBS")  # you can't do StringVar("LBS") 
tglBtn = Button(textvariable=buttonText, 
       command=toggle) 
tglBtn.pack() 

mainloop() 
+0

Vielen Dank, es ist schön, andere Lösung zu sehen. Danke wieder – rasPi2bSarah

+0

nach der Arbeit mit Ihrem Code, ich fühle es ist die beste Antwort, es half mir zu verstehen, wie StringVar verwenden, .set zusammen mit der .get ... Es tut mir leid, dass ich nicht Ihre beste, aber ich habe es heute geändert. Ich mag die andere Antwort auch. Danke Jasper – rasPi2bSarah

+0

Es ist in der Tat die bessere Antwort, da es mehr von der tkinter Funktionalität verwendet, die andere Lösung ist einfacher, aber hoffentlich einfacher zu verstehen. –

0

In Ihrer Linie text == LBS, vergleichen Sie Ihre eine string (text) und variable Instanz (LBS, die eine StringVar ist). Entweder würden Sie text und LBS.get() vergleichen oder einfach die Strings direkt vergleichen, wie im folgenden Beispiel.


from Tkinter import * 

myGui=Tk() 
myGui.geometry("200x100") 
myGui.title("basicGUI") 
myGui.configure(bg="gray") 

def toggle(): 
    text = tglBtn.cget("text") 
    if text == "LBS": 
     tglBtn.config(text = "KGS") 
    else: 
     tglBtn.config(text = "LBS") 

tglBtn = Button(text="LBS", command=toggle) 
tglBtn.pack() 

mainloop() 
+0

BIG WOW !!! Ja, ich wusste, dass ich nicht richtig mit Text umgehen konnte, aber ich hatte keine Ahnung, wie ich die Funktion dazu bringen sollte, sie zu lesen. Dein ein ausgezeichneter py Programmierer, solch eine saubere Lösung. Danke – rasPi2bSarah

+0

Neugierig: Sie setzen .cget ... warum ist es nicht einfach ??? – rasPi2bSarah

+1

mit '.get()', würden Sie alle Konfigurationsoptionen auf einmal erhalten. – Jasper

Verwandte Themen