为什么我不能在"重置"按下按钮?

时间:2016-03-14 21:10:43

标签: python button tkinter reset tkinter-entry

我正在制作一个程序,将公里数转换为英里数英里数公里。显示值时,我希望有一个重置按钮,重置值和用户编号。

我可以输入数字以清除但不是标签(finalKilo,finalMile)。有什么建议吗?

此外,还有其他方法可以在不使用Label的情况下显示计算值吗?

from tkinter import *

def closeWin():
   myGui.destroy()                   #Close Window Function

def kiloFunc():
    myText = kiloMent.get()          #Kilometers to Miles Fuction
    convert = 0.62
    miles = myText * convert
    finalKilo = Label(text = miles,fg='red',justify='center').place(x=200,y=80)


def mileFunc():
    myText2 = mileMent.get()         #Miles to Kilometers Function
    convertTwo = myText2 // 0.62    
    finalMile = Label(text = convertTwo, fg = 'red',justify='center').place(x=200,y=170)


def reset_values():
    kiloMent.set(0)
    mileMent.set(0)      #Resets the Data
    finalKilo.set("")
    finalMile.set("")



       #The GUI


myGui = Tk()

kiloMent = IntVar()
mileMent = IntVar()

myGui.title("Distance Converter")
myGui.geometry("450x200+500+200")

myLabel = Label(text="Welcome! Please enter your value then choose your option:",fg="blue",justify='center')
myLabel.pack()

kiloEntry = Entry(myGui, textvariable =   kiloMent,justify='center').pack()

kilo2milesButton = Button(text = "Kilometers to Miles!", command =     kiloFunc).pack()

mileEntry = Entry(myGui, textvariable =     mileMent,justify='center').place(x=130,y=105)

miles2kiloButton = Button(text = "Miles to Kilometers!", command = mileFunc).place(x=150,y=135)

reset = Button(text = "Reset Values!", command = reset_values).place(x=10,y=165)

quit = Button(text="Quit", command = closeWin).place(x=385,y=165)

myGui.mainloop()

2 个答案:

答案 0 :(得分:1)

而不是在每次转化时创建新标签,而是为结果创建一个标签,而不是text,而是为其分配textvariable,这是StringVar的一个实例。在该变量上,您可以调用set来更改与变量

关联的标签的文本

答案 1 :(得分:1)

Callidior是正确的,有多个错误:)

我已经调整了代码,把它放在一个类中,现在它应该可以工作了。

现在它在尝试更改标签时引用实际变量(miles和convertTwo)。你提到了标签本身。在这种情况下,你可能应该做的事情如下:

finalKilo.config(text = "")
finalMile.config(text = "")

另一个问题是您只在给出条目后定义了标签,而在重置时您重置了两个条目。因此,如果第一次只给出一个条目并且按下了重置,则会弹出一个错误,说明其中一个标签未定义/无。

以下代码应该有效。

from Tkinter import *

class hisGui:

    def __init__(self):
        self.myGui = Tk()

        self.kiloMent = IntVar()
        self.mileMent = IntVar()


        self.myGui.title("Distance Converter")
        self.myGui.geometry("450x200+500+200")

        myLabel = Label(text="Welcome! Please enter your value then choose your option:",fg="blue",justify='center')
        myLabel.pack()

        self.miles = StringVar()
        self.convertTwo = StringVar()
        self.finalKilo = Label(textvariable = self.miles,fg='red',justify='center').place(x=200,y=80)
        self.finalMile = Label(textvariable = self.convertTwo, fg = 'red',justify='center').place(x=200,y=170)

        kiloEntry = Entry(self.myGui, textvariable =   self.kiloMent,justify='center').pack()

        kilo2milesButton = Button(text = "Kilometers to Miles!", command =     self.kiloFunc).pack()

        mileEntry = Entry(self.myGui, textvariable =     self.mileMent,justify='center').place(x=130,y=105)

        miles2kiloButton = Button(text = "Miles to Kilometers!", command = self.mileFunc).place(x=150,y=135)

        reset = Button(text = "Reset Values!", command = self.reset_values).place(x=10,y=165)

        quit = Button(text="Quit", command = self.closeWin).place(x=385,y=165)

        self.myGui.mainloop()

    def closeWin(self):
        self.myGui.destroy()                   #Close Window Function

    def kiloFunc(self):
        myText = self.kiloMent.get()          #Kilometers to Miles Function
        convert = 0.62
        self.miles.set(myText * convert)

    def mileFunc(self):
        myText2 = self.mileMent.get()         #Miles to Kilometers Function
        self.convertTwo.set(myText2 // 0.62)

    def reset_values(self):
        self.kiloMent.set(0)
        self.mileMent.set(0)      #Resets the Data
        self.miles.set("")
        self.convertTwo.set("")

if __name__ == '__main__':
    Gui = hisGui()