Pages

Saturday, June 5, 2010

Tonnage/Price Calculator: Python

Every now and then, my colleagues need to calculate tonnages and price according to rate given by My boss. What they usually have been doing before is fetching a calculator and calculating it. Sometimes ago, I designed a excel formula to make this process fast. But they don't want to open excel sheet to calculate these small things. So I come up with an idea to write a python program that includes GUI. What they need to do is just fireing up this program and using it.
Here is the screenshot of Tonnage/Price Calculator program.
By using this program, you can calculate tonnages and price by 3 types of Units: Inch, Feet, Millimeter.

I includes the python code so that you can improve and use it.

"""TONNAGE/PRICE CALCULATOR
========================

AUTHOR = NETLYNKER
LANGUAGE = PYTHON 2.6.5
VERSION = 1.0

"""

from Tkinter import *
from math import *
import tkMessageBox


app = Tk()
app.title("Timber Tonnages/Price Calculator")
app.geometry("410x200+100+100")

#========================================================================

uom = StringVar()
uom.set(None)

option = OptionMenu(app, uom, "Feet", "Inch", "Millimeter")
option.grid(row=1, column=5, padx=5, pady=5)

#========================================================================
l1 = Label(app, text="Length").grid(row=1,column=0, padx=5, pady=5)

l2 = Label(app, text="Width").grid(row=2, column=0, padx=5, pady=5)

l3 = Label(app, text="Height").grid(row=3, column=0, padx=5, pady=5)

l4 = Label(app, text="Quantity").grid(row=4, column=0, padx=5, pady=5)

l5 = Label(app, text="Rate").grid(row=5, column=0, padx=5, pady=5)

l6 = Label(app, text="Measured By").grid(row=1, column=4, padx=5, pady=5)

l7 = Label(app, text="Tons",font="Tahoma").grid(row=4, column=6, padx=5, pady=5)

l8 = Label(app, text="S$",font="Tahoma").grid(row=5, column=6, padx=5, pady=5)

l9 = Label(app, text="Ton:", font="Tahoma").grid(row=4, column=4, padx=5, pady=5)

l10 = Label(app, text="Price: ",font="Tahoma").grid(row=5, column=4, padx=5, pady=5)

#========================================================================
ev1 = StringVar()
e1 = Entry(app, textvariable=ev1)
e1.grid(row=1, column=2, columnspan=2, padx=5, pady=5)

ev2 = StringVar()
e2 = Entry(app, textvariable=ev2)
e2.grid(row=2, column=2, columnspan=2, padx=5, pady=5)

ev3 = StringVar()
e3 = Entry(app, textvariable=ev3)
e3.grid(row=3, column=2, columnspan=2, padx=5, pady=5)

ev4 = StringVar()
e4 = Entry(app, textvariable=ev4)
e4.grid(row=4, column=2, columnspan=2, padx=5, pady=5)

ev5 = StringVar()
e5 = Entry(app, textvariable=ev5)
e5.grid(row=5, column=2, columnspan=2, padx=5, pady=5)

#=========================================================================
def in_to_ton():
global ton
try:
ton = ((float(ev1.get())*float(ev2.get())*float(ev3.get()))/86400)*int(ev4.get())
return ton
except ValueError:
valueerror()

def ft_to_ton():
global ton
try:
ton = ((float(ev1.get())*float(ev2.get())*float(ev3.get()))/7200)*int(ev4.get())
return ton
except ValueError:
valueerror()

def mm_to_ton():
global ton
try:
inc = float(ev1.get())/25.4
ton = ((inc*float(ev2.get())*float(ev3.get()))/86400)*int(ev4.get())
return ton
except ValueError:
valueerror()

def print_one():
global pr, ans
if uom.get() == "Inch":
ans = StringVar()
label = Label(app, textvariable=ans, bg="pink",width=10,font="Tahoma")
label.grid(row=4, column=5)
ans.set(round(in_to_ton(),3))
pr = StringVar()
prlab = Label(app, textvariable=pr, bg="pink",width=10,font="Tahoma")
prlab.grid(row=5, column=5)
pr.set(round(float(ton)*float(ev5.get()),3))
elif uom.get() == "Feet":
ans = StringVar()
label = Label(app, textvariable=ans, bg="pink",width=10,font="Tahoma")
label.grid(row=4, column=5)
ans.set(round(ft_to_ton(),3))
pr = StringVar()
prlab = Label(app, textvariable=pr, bg="pink",width=10,font="Tahoma")
prlab.grid(row=5, column=5)
pr.set(round(float(ton)*float(ev5.get()),3))
elif uom.get() == "Millimeter":
ans = StringVar()
label = Label(app, textvariable=ans, bg="pink",width=10,font="Tahoma")
label.grid(row=4, column=5)
ans.set(round(mm_to_ton(),3))
pr = StringVar()
prlab = Label(app, textvariable=pr, bg="pink",width=10,font="Tahoma")
prlab.grid(row=5, column=5)
pr.set(round(float(ton)*float(ev5.get()),3))
else:
tkMessageBox.showerror("Unit of Measurement","Select UOM(Feet/Inch/Millimeter)")

def reset():
#global e1, e2, e3, e4, e5
e1.delete(0,END)
e2.delete(0,END)
e3.delete(0,END)
e4.delete(0,END)
e5.delete(0,END)
pr.set("")
ans.set("")

def valueerror():
tkMessageBox.showerror("Wrong Value","Value must be numbers")
#=========================================================================

b1 = Button(app, text="Calculate", command=print_one, width=7)
b1.grid(row=7, column=2, padx=5, pady=5)

b2 = Button(app, text="Quit", command=exit, width=7)
b2.grid(row=7, column=3, padx=5, pady=5)

b3 = Button(app, text="Reset", command=reset, width=7)
b3.grid(row=7, column=5, padx=5, pady=5)

#=========================================================================

app.mainloop()

No comments:

Post a Comment