2016-05-14 149 views
-1

試圖使按鈕文本更改。如果按鈕有LBS,則單擊該按鈕應將其更改爲KGS。如果按鈕具有KGS,則單擊該按鈕應將其更改爲LBS。if else,button not working

該按鈕什麼都不做,但代碼似乎對我來說是正確的。

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

您每次運行函數時都將'text'設置爲''LBS「',所以它總是會做同樣的事情。您可能想要閱讀按鈕上有哪些文本,或者甚至更好,將它作爲True/False存儲在變量中,然後根據值設置文本。 – Peter

+0

不知道你在說什麼。我對Python非常陌生,我需要更好的線索。 – rasPi2bSarah

回答

1

,除非你加括號你沒有創建一個StringVar對象。名稱也是誤導性的,因爲StringVar將是「LBS」或「KGS」。 StringVar的整點在於,只要StringVar更改其值,該按鈕的文本就會自動更新。

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

非常感謝,很高興看到其他解決方案。再次感謝 – rasPi2bSarah

+0

,我覺得這是最好的答案,它幫助我理解如何使用StringVar,.set和.get ...對不起,我並沒有把你的標記標記爲最佳,但我今天改變了它。我也喜歡其他答案。謝謝Jasper – rasPi2bSarah

+0

它確實是更好的答案,因爲它使用更多的tkinter功能,另一種解決方案更簡單,但希望更容易理解。 –

0

在您的線路text == LBS,你正在比較一個stringtext)和可變實例(LBS,這是一個StringVar)。您可以比較textLBS.get(),或直接比較字符串,如下例所示。 LBS = StringVar()


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 !!!是的,我知道我沒有正確處理文本,但不知道如何讓函數讀取它。你是一位出色的py程序員,這種乾淨的解決方案。謝謝 – rasPi2bSarah

+0

好奇:你把.cget ...爲什麼它不只是得到? – rasPi2bSarah

+1

與'.get()',你會得到所有的配置選項。 – Jasper