【问题标题】:Why can't I get my labels to clear when the "Reset" button is pressed?为什么按下“重置”按钮后我的标签无法清除?
【发布时间】:2016-06-30 02:48:32
【问题描述】:

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

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

另外,有没有其他方法可以在不使用标签的情况下显示计算值?

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()

【问题讨论】:

    标签: python button tkinter reset tkinter-entry


    【解决方案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()
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2021-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-10
        • 2012-10-17
        • 1970-01-01
        相关资源
        最近更新 更多