2016-09-23 1 views
0

Toute idée sur la façon de rendre toutes les entrées et les étiquettes dans mon interface graphique commence vide mais se met à jour lorsque la fonction de calcul se produit? Ils commencent actuellement avec un 0. J'ai essayé beaucoup de choses mais rien n'a fonctionné.Comment faire pour que l'étiquette et l'entrée commencent vides

Voici le code:

from tkinter import * 

root = Tk(className="Page Calculator") 
root.title("PgCalc") 
read = IntVar() 
total = IntVar() 
left = IntVar() 
percent = IntVar() 

def calculate(event=None): 
    try: 
     left.set(total.get() - read.get()) 
     percent.set(int(read.get()*100/total.get())) 
    except ZeroDivisionError: 
     print("ZeroDivisionError") 
    else: 
     print() 

root.bind('<Return>', calculate) 

read_label = Label(root,text="Pages Read:") 
read_label.grid(column=1, row=1) 

read_entry = Entry(root, width=8, textvariable=read) 
read_entry.grid(column=2, row=1) 
read_entry.focus() 

total_label = Label(root,text="Total Pages:") 
total_label.grid(column=1, row=2) 

total_entry = Entry(root, width=8, textvariable=total) 
total_entry.grid(column=2, row=2) 


calculate_button = Button(root,text="Calculate",command= calculate) 
calculate_button.grid(column=2, row=3) 

percent_label = Label(root,text="Percent Finished:") 
percent_label.grid(column=1, row=4) 

left_label = Label(root,text="Pages Left:") 
left_label.grid(column=1, row=5) 

percentresult_label = Label(root,textvariable=percent) 
percentresult_label.grid(column=2, row=4) 

leftresult_label = Label(root,textvariable=left) 
leftresult_label.grid(column=2, row=5) 

root.mainloop() 

Répondre

1

IntVar() a une valeur par défaut de 0. Même si elles sont IntVar, vous pouvez set des chaînes comme leur valeur (notez que lorsque vous essayez de get sa valeur, vous aurez obtenir une erreur s'ils contiennent toujours des chaînes).

Vous pouvez simplement faire

read = IntVar() 
read.set("") 

Mais, puisque vous utilisez l'entrée, vous n'avez pas besoin IntVar du tout. Vous pouvez directement obtenir la valeur d'une entrée et la convertir en entier.

def calculate(event=None): 
    try: 
     leftresult_label.config(text=str(int(total_entry.get()) - int(read_entry.get()))) 
    except ValueError: 
     print("Please enter a number") 

#You need to remove textvariables from entries as well like below 
total_entry = Entry(root, width=8)