Forum >> Programmazione Python >> GUI >> PROBLEMA TKINTER! RISULTATO FUNZIONE ALL'INTERNO DI UN ETICHETTA "FISSA"!

Pagina: 1

VORREI CHE LA FUNZIONE "area_t", UNA VOLTA RICHIAMATA,SCRIVESSE IL SUO RISULTATO ALL'INTERNO DELL'ETICHETTA "risultato"!!!

IL PROBLEMA E' CHE NON HO IDEA DI COME FARE!!

P.S=SONO NUOVO CON PYTHON! :)




SORGENTE:




from Tkinter import *

#__________________________________________

def area_t():

a=((x.get()*y.get())/2)

#__________________________________________

root=Tk()

root.geometry("600x600+750+300")

root.title("RISOLVI FORMULE GEOMETRIA")

root.resizable(False,False)

root.configure(background="yellow")




a=Label(text="AREA DEL RETTANGOLO",font="stencil",fg="purple",bg="yellow").pack()

x=DoubleVar(value="BASE")

y=DoubleVar(value="ALTEZZA")

b=Entry(textvariable=x,bg="light green").pack()

c=Entry(textvariable=y,bg="light green").pack()

d=Button(text="CALCOLA",bg="blue",fg="red",font="stencil",command=area_t).pack()




#__________________________________________________________________________________________

risultato=Label(font="calibri",fg="black",bg="gray",height="1",width="15",relief="sunken").pack(padx="1",pady="20")

#__________________________________________________________________________________________




root.mainloop()
Purtroppo gli errori contenuti in qelle poche righe sono talmente tanti che sviscerarli uno ad uno senza sapere le tue conoscenze pregresse diventa troppo lungo. Posto per confronto la versione corretta e riveduta.
import Tkinter as tk

def area_t(evt=None):
    a = float(x.get()) * float(y.get())
    risultato.configure(text=str(a))    

root = tk.Tk()
root.geometry("600x600+750+300")
root.title("RISOLVI FORMULE GEOMETRIA")
root.resizable(False, False)
root.configure(bg="yellow")

tk.Label(root, text="AREA DEL RETTANGOLO", font="stencil", fg="purple", bg="yellow").pack()

frm1 = tk.Frame(root, bg=root["bg"])
frm1.pack()

tk.Label(frm1, text="Base:", font="stencil", fg="purple", bg="yellow").grid(row=0, column=0, sticky="e")
tk.Label(frm1, text="Altezza:", font="stencil", fg="purple", bg="yellow").grid(row=1, column=0, sticky="e")

x = tk.StringVar(value="")
b = tk.Entry(frm1, textvariable=x, bg="light green")
b.grid(row=0, column=1)
b.focus()

y = tk.StringVar(value="")
tk.Entry(frm1, textvariable=y, bg="light green").grid(row=1, column=1)

d = tk.Button(frm1, text="CALCOLA", bg="blue", fg="red", font="stencil", command=area_t)
d.grid(row=2, column=1, pady=8 )
d.bind("<Return>", area_t)

tk.Label(frm1, text="Risultato:", font="stencil", fg="purple", bg="yellow").grid(row=3, column=0, sticky="e")

risultato = tk.Label(frm1, font="calibri", fg="black", anchor="w", bg="gray", height="1", width="15", relief="sunken")
risultato.grid(row=3, column=1, pady=4)

root.mainloop()


--- Ultima modifica di Claudio_F in data 2016-05-30 12:57:53 ---
*** Il codice va evidenziato con il simbolo di fianco ai colori per non perdere l'indentazione ***
Ti ringrazio per il tempo dedicatomi. . .
Nonostante ciò, il sorgente che mi hai passato è pieno di errori ed ogni volta che provo ad avviarlo con il compilatore mi da numerosi problemi!

Inoltre non vedo tutti gli errori che sostieni ci siano all'interno del mio sorgente; a me funziona tutto correttamente quando lo avvio:


from Tkinter import *

def area_t():

a=((x.get()*y.get())/2)

e=Label(text=a,font="stencil",fg="red",bg="yellow").pack()

root=Tk()

root.geometry("600x600+750+300")

root.title("RISOLVI FORMULE GEOMETRIA")

root.resizable(False,False)

root.configure(background="yellow")

a=Label(text="AREA DEL RETTANGOLO",font="stencil",fg="purple",bg="yellow").pack()

x=DoubleVar(value="BASE")

y=DoubleVar(value="ALTEZZA")

b=Entry(textvariable=x,bg="light green").pack()

c=Entry(textvariable=y,bg="light green").pack()

d=Button(text="CALCOLA",bg="blue",fg="red",font="stencil",command=area_t).pack()

risultato=Label(font="calibri",fg="black",bg="gray",height="1",width="15",relief="sunken").pack(padx="1",pady="20")

root.mainloop()





Nonostante sia alle prime armi con Python credo di saper fare queste poche righe. . .

Avevo chiesto una cosa e ne ho ricevuta un'altra ;)

Nonostante ciò ti ringrazio per quello che hai fatto!





--- Ultima modifica di JOUK25000 in data 2016-05-29 21:18:58 ---

--- Ultima modifica di JOUK25000 in data 2016-05-29 21:19:23 ---
Prima di tutto meglio modificare i precedenti messaggi per indentare correttamente il codice sul forum (modifica->seleziona codice->simbolo "<>" di fianco ai colori).

Il mio codice fa essenzialmente quello che hai chiesto: scrivere il "RISULTATO FUNZIONE ALL'INTERNO DI UN ETICHETTA", con qualche aggiustata all'impaginazione, ho aggiunto l'autofocus sul primo Entry all'avvio, e gestisce anche la pressione del tasto Invio sul pulsante calcola.

Non contiene errori per cui se non ti si avvia c'è qualcosa che non sappiamo. Io faccio un copy/paste dal forum all'editor, salvo come prova.py, avvio con python prova.py e si apre la finestra correttamente funzionante (si parla ovviamente di Python2.x). Che errori ti da?

Riguardo al tuo codice non ci sono errori sintattici, ma solo di logica e semantici (anche l'area del rettangolo è sbagliata ;)), per cui compila e funzionicchia senza crashare (in seconda battuta ci sono alcuni consigli di "stile" raccolti nella PEP8, giusto per sapere che c'è).

Ma tu volevi scrivere dentro alla Label creata all'inizio, e non aggiungere nuove Label una sotto l'altra ad ogni click su calcola. Guarda come uso la variabile 'risultato' nel mio codice (soprattutto cosa le assegno), e anche il primo argomento passato nella creazione di ogni widget.

Poi insomma, la modifica minima assoluta al codice per fare quello che dici è la seguente (ma cosa rappresentano le variabili 'a' 'b' 'c' e 'd'?):
from Tkinter import *

def area_t():
    a=(x.get()*y.get())
    risultato.configure(text=str(a))

root=Tk()
root.geometry("600x600+750+300")
root.title("RISOLVI FORMULE GEOMETRIA")
root.resizable(False,False)
root.configure(background="yellow")
a=Label(text="AREA DEL RETTANGOLO",font="stencil",fg="purple",bg="yellow").pack()
x=DoubleVar(value="BASE")
y=DoubleVar(value="ALTEZZA")
b=Entry(textvariable=x,bg="light green").pack()
c=Entry(textvariable=y,bg="light green").pack()
d=Button(text="CALCOLA",bg="blue",fg="red",font="stencil",command=area_t).pack()
risultato=Label(font="calibri",fg="black",bg="gray",height="1",width="15",relief="sunken")
risultato.pack(padx="1",pady="20")
root.mainloop() 


--- Ultima modifica di Claudio_F in data 2016-05-30 12:53:22 ---
*** Il codice va evidenziato con il simbolo di fianco ai colori per non perdere l'indentazione ***
Grazie mille, ho risolto!
(Nell'aria del rettangolo ho aggiunto per sbaglio "/2"). . .
Ops! Mi sono confuso!

Grazie ancora! :D


Pagina: 1



Esegui il login per scrivere una risposta.