Programa que convierta de una Unidad de Temperatura a varias
Este programa puede convertir de una unidad de medida asignada por el usuario mediante un ComboBox (Lista/Menu Despegable), a continuación dejo el codigo del programa (Python 2.7.X)
#-*-coding:utf-8-*-__author__="Baxh_Adrek_wolf"from Tkinter import * from ttk import * #ttk es una Libreria que posee el elemento que necesitaremos, Combobox (Combobox es un menu Despegable)from tkMessageBox import * #con la instrucción 'from' y tkMessageBox facilitaremos el trabajo pues ya no sera necesario poner Tkinter.tkMessageBox.showinfo y etc#reduciendo asi el trabajo y simplificandolo con un simple 'showinfo' 'showerror' etc... def convert(): #la funcion para el Boton 'ok' que realziara el trabajo de convertir el valor en nuestro 'Entry' a la Unidad seleccionada en el Combobox try: #es importante destacar que esta vez estamos usando 'float' y no 'int' ya que las unidades suelen ser mejor apreciadas en decimales que en Enteros unit = float(CatchValue.get()) #al igual que en un 'Entry' podemos usar .get() en nuestro ComboBox para obtener la Unidad seleccionada, este valor sera tipo String
if (UnitsContainer.get()=="Celsius"): #como se menciona arriba, si al usar .get() se obtiene el 'String' "Celsuis" tomara el valor como una Unidad en Celsius y convertira en el resto de unidades menos Celsius
cF = (unit*1.8)+32
cK = (unit+273.16) cR = cF+459.67
cRe = unit*0.8
showinfo("Conversión de Celsius", "°C a °F: "+cF.__str__()+"\n°C a K: "+cK.__str__()+"\n°C a °R: "+cR.__str__()+"\n°C a °Ré: "+cRe.__str__()) if (UnitsContainer.get()=="Farenheit"): cC = (unit-32)/1.8
cK = (unit+273.16) cR = unit+459.67
cRe = cC*0.8
showinfo("Conversión de Farenheit", "°F a °C: "+cC.__str__()+"\n°F a K: "+cK.__str__()+"\n°F a °R: "+cR.__str__()+"\n°F a °Ré: "+cRe.__str__()) if (UnitsContainer.get()=="Kelvin"): cC = unit-273.16
cF = (cC*1.8)+32
cR = cF+459.67
cRe = cC*0.8
showinfo("Conversión de Kelvin", " K a °C: "+cC.__str__()+"\n K a °F: "+cF.__str__()+"\n K a °R: "+cR.__str__()+"\n K a °Ré: "+cRe.__str__()) if (UnitsContainer.get()=="Rankine"): cF = unit-459.67
cC = (unit-32)/1.8
cK = cC+273.16
cRe = cC*0.8
showinfo("Conversion de Rankine", "°R a °C: "+cC.__str__()+"\n°R a °F: "+cF.__str__()+"\n°R a K: "+cK.__str__()+"\n°R a °Ré: "+cRe.__str__()) if (UnitsContainer.get()=="Réamur"): cC = unit/0.8
cF = (cC*1.8)+32
cK = cC+273.16
cR = cF+459.67
showinfo("Conversion de Réamur", "°Ré a °C: "+cC.__str__()+"\n°Ré a °F: "+cF.__str__()+"\n°Ré a K: "+cK.__str__()+"\n°Ré a °R: "+cR.__str__()) except ValueError: showerror("Input Data Error", "Por favor ingrese solo Numeros (No se aceptan campos vacios!) !") def UnitSelected(self): #Esta funcion, se diseño en vase a un evento del ComboBox, que recibe un 'evento' por cada seleccion realizada if (UnitsContainer.get()=="Celsius"):#Al igual que en la funcion convertir, con .get obtendremos el valor del ComboBox, esto es para mostrar un mensaje y habilitar el boton Ok.config(state='normal', text="Listo!") #mencionado anteriormente, el Boton esta deshabilitado desde su creación, para que se pueda usar se debe usar el parametro 'state=' y con normal, regresara a la normalidad, es decir, volvera a ser usable ConvertionsOn.config(text="Convertir de Celsius a: \nFarenheit\nKelvin\nRankine\nRéamur") if (UnitsContainer.get()=="Farenheit"): Ok.config(state='normal', text="Listo!") ConvertionsOn.config(text="Convertir de Farenheit a: \nCelsius\nKelvin\nRankine\nRéamur") if (UnitsContainer.get()=="Kelvin"): Ok.config(state='normal', text="Listo!") ConvertionsOn.config(text="Convertir de Kelvin a: \nCelsius\nFarenheit\nRankine\nRéamur") if (UnitsContainer.get()=="Rankine"): Ok.config(state='normal', text="Listo!") ConvertionsOn.config(text="Convertir de Rankine a: \nCelsius\nFarenheit\nKelvin\nRéamur") if (UnitsContainer.get()=="Réamur"): Ok.config(state='normal', text="Listo!") ConvertionsOn.config(text="Convertir de Réamur a: \nCelsius\nFarenheit\nKelvin\nRankine") def clearall(): #esta funcion, llamada por el Botón "Limpiar" se encargara de eso "Limpiar" es decir, todos los datos empezaran como "nuevos" sin datos ni entradas
if(askyesno("Ask First, Do Later","Estas Seguro de tus acciones?")==True): #Dentro de este 'if' se desplegara una "Ventana" con un (titulo,mensaje) y al ser de tipo 'AskYesNo' es de tipo Booleano, es decir, Cierto o Falso
#Si la respuesta es 'Si' (Yes) esta sera un Valor 'Verdadero' (True) por lo tanto, se realiza lo que esta dentro del if
showwarning("CLEARING INPUTS","BORRANDO TODOS LOS DATOS") UnitsContainer.set("") #.set("") en nuestro Combobox crea temporalmente un valor vacio o nulo, que desaparece pues solo es de vista, ya que no es un valor nueveo
ConvertionsOn.config(text="") CatchValue.delete(0, END) #.delete(0, END) borra los datos registrados en nuestro 'entry', dejandolo limpio y sin daots
Ok.config(state='disabled') else: #Si la respuesta es 'No' esta sera de tipo 'Falso'(False) que es diferente a lo que pedimos en el if por lo que mostrara solo la siguiente ventana y no realizara más
showinfo("","Esta bien :)") Windowy = Tk() Windowy.title("Convertidor de Unidades de Temperatura") Windowy.geometry("500x250") mwin = Frame(Windowy) mwin.grid(column=0, row=0, padx=(50,50), pady=(20,20)) mwin.rowconfigure(0, weight=1) mwin.columnconfigure(0, weight=1) tvalue = ""CatchValue = Entry(mwin, width=10 ,textvariable=tvalue) CatchValue.grid(column=1,row=1, padx=(10,10), pady=(10,10)) ConvertionsOn = Label(mwin) ConvertionsOn.grid(column=2,row=2, pady=(40,40),padx=(10,10)) #Aqui es donde nos encontraremos con ComboBox, o más bien, declararemos un ComboBox y más
UnitsContainer = Combobox (mwin, state="readonly",width=10) #con la libreria 'ttk' podremos crear ComboBox, y se usan como el resto de 'Widgets'
'''la diferencia aqui es que usaremos un Parametro para el programa solo pueda usar Valores que le demos,
para eso usaremos el parametro 'state', igual queen un Botón,
la diferencia aqui es que se usan otros valores, en este caso usaremos "ReadOnly"
(Solo Lectura) para que solo se puedan usar los valoreso textos que nosotros declaramos al ComboBox'''
UnitsContainer["values"] = ["Celsius", "Farenheit", "Kelvin", "Rankine", "Réamur"] '''debido a que los ComboBox son "Menus Despegables",
para darle valores se hace con un vector, y
estos siempre seran tomados como 'String' que otro para ingresarle valores o datos,
es necesario usar ["values"] para llenar sus datos con los que queramos,
como se indica arriba
'''
UnitsContainer.bind("<<ComboboxSelected>>",UnitSelected) # con .bind("<<ComboBoxSelected>>",UnitSelected) le decimos al programa, que al ser Seleccionado un Dato/Valor del ComboBox, realice una Acción, como un Boton# y al igual que un boton, podemos poner funciones, que esta definida en las primeras lineas del programaUnitsContainer.grid(column=2,row=1,padx=(20,20),pady=(10,10)) #Nada nuevo aqui, solo la posición del Combobox Ok = Button(mwin, text="Listo?", command=convert, state='disabled') #el parametro 'state' = 'disabled' indica que este botón estara deshabilitado, es decir no se le puede hacer clic por ninugn motivo#simplemente se mostrara pero su uso no estara disponible hasta que el usuario seleccione una unidad de medida del Combobox#Esto para evitar errores(Aunque con la excepcion ValueError, se impiden, esto lo refuerza solo un poco)Ok.grid(column=3, row=1, padx=(10,10), pady=(10,10), sticky=E) cleanBttn = Button(mwin, text="Limpiar", command=clearall) cleanBttn.grid(column=4, row=1, padx=(10,10), pady=(10,10)) Windowy.mainloop()
Comentarios
Publicar un comentario