2016-03-14 4 views
0

Je fais un programme qui convertit les kilomètres en miles et miles en kilomètres. Lorsque les valeurs sont affichées, je veux qu'il y ait un bouton de réinitialisation qui réinitialise les valeurs et le nombre d'utilisateurs.Pourquoi ne puis-je pas effacer mes étiquettes lorsque j'appuie sur le bouton "Reset"?

Je peux obtenir l'entrée des nombres à effacer mais pas l'étiquette (finalKilo, finalMile). Aucune suggestion?

De même, existe-t-il un autre moyen d'afficher la valeur calculée sans utiliser d'étiquette?

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

Répondre

0

Callidior était correcte, il y avait plusieurs erreurs :)

J'ai ajusté le code, le mettre dans une classe et maintenant ça devrait marcher.

Maintenant, il se réfère à la variable réelle (miles et convertTwo) quand il essaie de changer les étiquettes. Vous avez parlé des étiquettes elles-mêmes. Dans ce cas, vous devriez probablement avoir fait quelque chose comme:

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

Un autre problème est que vous avez défini l'étiquette seulement après l'une entrée a été donnée, alors que dans la remise à zéro remise à zéro à la fois. Ainsi, dans le cas où une seule entrée est donnée pour la première fois et que la réinitialisation est poussée, une erreur apparaît indiquant que l'une des étiquettes n'est pas définie/Aucune.

Le code ci-dessous devrait fonctionner.

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

Au lieu de créer de nouvelles étiquettes sur chaque conversion, créez plutôt une seule étiquette pour le résultat et, au lieu de text, attribuer un textvariable à ce qui est une instance de StringVar. Sur cette variable, vous pouvez appeler set modifier le texte de l'étiquette associée à la variable,