2016-05-14 118 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