Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 372b46f

Browse files
Merge pull request #2778 from Avdhesh-Varshney/convertor
[GSSoC'23] All Convertors Application ✔️
2 parents 2bb1c25 + 099dc07 commit 372b46f

File tree

3 files changed

+407
-0
lines changed

3 files changed

+407
-0
lines changed

‎All-Convertors/Convertors.py‎

Lines changed: 355 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,355 @@
1+
from tkinter import *
2+
import urllib.request
3+
import webbrowser
4+
from functools import partial
5+
from tkinter import Tk, StringVar , ttk
6+
7+
###################################################################
8+
9+
root = Tk()
10+
root.title('ALL IN ONE CONVERTER')
11+
root.geometry("450x400+100+200")
12+
labelfont = ('ariel', 56, 'bold')
13+
l=Label(root,text='ALL IN ONE CONVERTER',font = ("Arial", 20, "italic"), justify = CENTER)
14+
l.place(x=80,y=20)
15+
16+
widget = Button(None, text="QUIT", bg="white", fg="red",font = ("Arial", 14, "bold"), relief = RAISED, bd=5, justify = CENTER, highlightbackground = "red", overrelief = GROOVE, activebackground = "green", activeforeground="blue", command=root.destroy).place(x=350,y=350)
17+
18+
#############################################################################################################################################
19+
20+
def CurrencyConverter():
21+
22+
ids = {"US Dollar" : 'USD', "Euros" : 'EUR', "Indian Rupees" : 'INR', "Qatar Doha" : 'QAR', "Zimbwabe Harare" : 'ZWD', "Arab Emirates Dirham" : 'AED', "Pound Sterling" : 'GBP', "Japanese Yen" : 'JPY', "Yuan Renminbi" : 'CNY'}
23+
24+
def convert(amt, frm, to):
25+
html =urllib.request.urlopen("http://www.exchangerate-api.com/%s/%s/%f?k=a28d653d2d4fd2727003e437" % (frm , to, amt))
26+
return html.read().decode('utf-8')
27+
28+
def callback():
29+
try:
30+
amt = float(in_field.get())
31+
32+
except ValueError:
33+
out_amt.set('Invalid input')
34+
return None
35+
if in_unit.get() == 'Select Unit' or out_unit.get() == 'Select Unit':
36+
out_amt.set('Input or output unit not chosen')
37+
return None
38+
else:
39+
frm = ids[in_unit.get()]
40+
to = ids[out_unit.get()]
41+
out_amt.set(convert(amt, frm, to))
42+
43+
root = Toplevel()
44+
root.title("Currency Converter")
45+
46+
# initiate frame
47+
mainframe = ttk.Frame(root, padding="3 3 12 12")
48+
mainframe.pack(fill=BOTH, expand=1)
49+
titleLabel = Label (mainframe, text = "Currency Converter", font = ("Arial", 12, "bold"), justify = CENTER).grid(column=1,row=1)
50+
in_amt = StringVar()
51+
in_amt.set('0')
52+
out_amt = StringVar()
53+
54+
in_unit = StringVar()
55+
out_unit = StringVar()
56+
in_unit.set('Select Unit')
57+
out_unit.set('Select Unit')
58+
59+
# Add input field
60+
in_field = ttk.Entry(mainframe, width=20, textvariable=in_amt)
61+
in_field.grid(row=1, column=2, sticky=(W, E))
62+
63+
# Add drop-down for input unit
64+
in_select = OptionMenu(mainframe, in_unit, "US Dollar", "Euros", "Indian Rupees", "Qatar Doha", "Zimbwabe Harare", "Arab Emirates Dirham", "Pound Sterling", "Japanese Yen", "Yuan Renminbi").grid(column=3, row=1, sticky=W)
65+
66+
# Add output field and drop-down
67+
ttk.Entry(mainframe, textvariable=out_amt, state="readonly").grid(column=2, row=3, sticky=(W, E))
68+
in_select = OptionMenu(mainframe, out_unit, "US Dollar", "Euros", "Indian Rupees", "Qatar Doha", "Zimbwabe Harare", "Arab Emirates Dirham", "Pound Sterling", "Japanese Yen", "Yuan Renminbi").grid(column=3, row=3, sticky=W)
69+
70+
calc_button = ttk.Button(mainframe, text="Calculate",command=callback).grid(column=2, row=2, sticky=E)
71+
72+
for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)
73+
74+
in_field.focus()
75+
76+
#################################################################################################
77+
78+
def WeightConverter():
79+
# factors to multiply to a value to convert from the following units to meters(m)
80+
factors = {'kg' : 1000, 'hg' : 100, 'dg' : 10, 'g' : 1,'deg' : 0.1, 'cg' : 0.01, 'mg' : 0.001}
81+
ids = {"Kilogram" : 'kg', "Hectagram" : 'hg', "Decagram" : 'dg', "Decigram" : 'deg', "Kilogram" : 'kg', "gram" : 'g', "centigram" : 'cg', "milligram" : 'mg'}
82+
# function to convert from a given unit to another
83+
def convert(amt, frm, to):
84+
if frm != 'g':
85+
amt = amt * factors[frm]
86+
return amt / factors[to]
87+
else:
88+
return amt / factors[to]
89+
90+
def callback():
91+
try:
92+
amt = float(in_field.get())
93+
except ValueError:
94+
out_amt.set('Invalid input')
95+
return None
96+
if in_unit.get() == 'Select Unit' or out_unit.get() == 'Select Unit':
97+
out_amt.set('Input or output unit not chosen')
98+
return None
99+
else:
100+
frm = ids[in_unit.get()]
101+
to = ids[out_unit.get()]
102+
out_amt.set(convert(amt, frm, to))
103+
104+
# initiate window
105+
root = Toplevel()
106+
root.title("Weight Converter")
107+
108+
# initiate frame
109+
mainframe = ttk.Frame(root, padding="3 3 12 12")
110+
mainframe.pack(fill=BOTH, expand=1)
111+
titleLabel = Label (mainframe, text = "Weight Converter", font = ("Arial", 12, "bold"), justify = CENTER).grid(column=1,row=1)
112+
113+
in_amt = StringVar()
114+
in_amt.set('0')
115+
out_amt = StringVar()
116+
117+
in_unit = StringVar()
118+
out_unit = StringVar()
119+
in_unit.set('Select Unit')
120+
out_unit.set('Select Unit')
121+
122+
# Add input field
123+
in_field = ttk.Entry(mainframe, width=20, textvariable=in_amt)
124+
in_field.grid(row=1, column=2, sticky=(W, E))
125+
126+
# Add drop-down for input unit
127+
in_select = OptionMenu(mainframe, in_unit, "Kilogram","Hectagram","Decagram", "gram", "Decigram","Centigram", "Milligram") .grid(column=3, row=1, sticky=W)
128+
129+
# Add output field and drop-down
130+
ttk.Entry(mainframe, textvariable=out_amt, state="readonly").grid(column=2, row=3, sticky=(W, E))
131+
in_select = OptionMenu(mainframe, out_unit, "Kilogram","Hectagram","Decagram", "gram", "Decigram","Centigram", "Milligram").grid(column=3, row=3, sticky=W)
132+
133+
calc_button = ttk.Button(mainframe, text="Calculate", command=callback).grid(column=2, row=2, sticky=E)
134+
135+
for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)
136+
137+
in_field.focus()
138+
139+
###########################################################################################################
140+
141+
def AreaConverter():
142+
wind = Toplevel()
143+
wind.minsize(width=400, height=150)
144+
wind.maxsize(width=400, height=150)
145+
146+
meterFactor = {'square meter':1,'square km':1000000,'square rood':1011.7141056,'square cm':0.0001,'square foot':0.09290304 ,
147+
'square inch':0.00064516, 'square mile':2589988.110336, 'milimeter':0.000001,'square rod':25.29285264,
148+
'square yard':0.83612736, 'square township':93239571.9721, 'square acre':4046.8564224 ,'square are': 100,
149+
'square barn':1e-28, 'square hectare':10000, 'square homestead':647497.027584 }
150+
151+
def convert(x, fromUnit, toUnit):
152+
if fromVar.get() in meterFactor.keys() and toVar.get() in meterFactor.keys():
153+
resultxt.delete(0, END)
154+
result = (float(str(x))*meterFactor[fromUnit])/(meterFactor[toUnit])
155+
resultxt.insert(0, str(result))
156+
157+
titleLabel = Label (wind, text = "Area Converter", font = ("Arial", 12, "bold"), justify = CENTER).grid(column=1,row=1)
158+
159+
e = Entry(wind)
160+
e.grid(row = 1, column = 2)
161+
values = list(meterFactor.keys())
162+
163+
fromVar = StringVar(wind)
164+
toVar = StringVar(wind)
165+
fromVar.set("From Unit")
166+
toVar.set("To Unit")
167+
168+
169+
fromOption = OptionMenu(wind, fromVar, *values, command= lambda y: convert(e.get(), fromVar.get() ,toVar.get()))
170+
fromOption.grid(row=1, column = 3)
171+
172+
toLabel = Label(wind, text="To : ", font="Arial").grid(row=2, column = 2)
173+
toOption = OptionMenu(wind, toVar, *values, command= lambda x: convert(e.get(), fromVar.get() ,toVar.get()))
174+
toOption.grid(row=3, column = 3)
175+
176+
resultxt = Entry(wind)
177+
resultxt.grid(row=3, column=2)
178+
179+
#############################################################################################################################################################
180+
181+
def LengthConverter():
182+
# factors to multiply to a value to convert from the following units to meters(m)
183+
factors = {'nmi' : 1852, 'mi' : 1609.34, 'yd' : 0.9144, 'ft' : 0.3048, 'inch' : 0.0254, 'km' : 1000, 'm' : 1, 'cm' : 0.01, 'mm' : 0.001}
184+
ids = {"Nautical Miles" : 'nmi', "Miles" : 'mi', "Yards" : 'yd', "Feet" : 'ft', "Inches" : 'inch', "Kilometers" : 'km', "meters" : 'm', "centimeters" : 'cm', "millileters" : 'mm'}
185+
186+
# function to convert from a given unit to another
187+
def convert(amt, frm, to):
188+
if frm != 'm':
189+
amt = amt * factors[frm]
190+
return amt / factors[to]
191+
else:
192+
return amt / factors[to]
193+
194+
def callback():
195+
try:
196+
amt = float(in_field.get())
197+
except ValueError:
198+
out_amt.set('Invalid input')
199+
return None
200+
if in_unit.get() == 'Select Unit' or out_unit.get() == 'Select Unit':
201+
out_amt.set('Input or output unit not chosen')
202+
return None
203+
else:
204+
frm = ids[in_unit.get()]
205+
to = ids[out_unit.get()]
206+
out_amt.set(convert(amt, frm, to))
207+
208+
# initiate window
209+
root = Toplevel()
210+
root.title("Length Converter")
211+
212+
# initiate frame
213+
mainframe = ttk.Frame(root, padding="3 3 12 12")
214+
mainframe.pack(fill=BOTH, expand=1)
215+
titleLabel = Label (mainframe, text = "Length Converter", font = ("Arial", 12, "bold"), justify = CENTER).grid(column=1,row=1)
216+
217+
in_amt = StringVar()
218+
in_amt.set('0')
219+
out_amt = StringVar()
220+
221+
in_unit = StringVar()
222+
out_unit = StringVar()
223+
in_unit.set('Select Unit')
224+
out_unit.set('Select Unit')
225+
226+
# Add input field
227+
in_field = ttk.Entry(mainframe, width=20, textvariable=in_amt)
228+
in_field.grid(row=1, column=2, sticky=(W, E))
229+
230+
# Add drop-down for input unit
231+
in_select = OptionMenu(mainframe, in_unit, "Nautical Miles", "Miles", "Yards", "Feet", "Inches", "Kilometers", "meters", "centimeters", "millileters").grid(column=3, row=1, sticky=W)
232+
233+
# Add output field and drop-down
234+
ttk.Entry(mainframe, textvariable=out_amt, state="readonly").grid(column=2, row=3, sticky=(W, E))
235+
in_select = OptionMenu(mainframe, out_unit, "Nautical Miles", "Miles", "Yards", "Feet", "Inches", "Kilometers", "meters", "centimeters", "millileters").grid(column=3, row=3, sticky=W)
236+
237+
calc_button = ttk.Button(mainframe, text="Calculate", command=callback).grid(column=2, row=2, sticky=E)
238+
239+
for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)
240+
241+
in_field.focus()
242+
243+
###################################################################################################################################################################
244+
245+
def TemperatureConverter():
246+
def convert():
247+
celTemp = celTempVar.get()
248+
fahTemp = fahTempVar.get()
249+
250+
if celTempVar.get() != 0.0:
251+
celToFah = (celTemp * 9/5 + 32)
252+
fahTempVar.set(celToFah)
253+
254+
elif fahTempVar.get() != 0.0:
255+
fahToCel = ((fahTemp - 32) * (5/9))
256+
celTempVar.set(fahToCel)
257+
258+
def reset():
259+
top = Toplevel(padx=50, pady=50)
260+
top.grid()
261+
message = Label(top, text = "Reset Complete")
262+
button = Button(top, text="OK", command=top.destroy)
263+
264+
message.grid(row = 0, padx = 5, pady = 5)
265+
button.grid(row = 1, ipadx = 10, ipady = 10, padx = 5, pady = 5)
266+
267+
fahTempVar.set(int(0))
268+
celTempVar.set(int(0))
269+
top = Toplevel()
270+
top.title("Temperature Converter")
271+
###MAIN###
272+
celTempVar = IntVar()
273+
celTempVar.set(int(0))
274+
fahTempVar = IntVar()
275+
fahTempVar.set(int(0))
276+
titleLabel = Label (top, text = "Temperature Converter", font = ("Arial", 12, "bold"), justify = CENTER).grid(column=1,row=1)
277+
278+
celLabel = Label (top, text = "Celcius: ", font = ("Arial", 16), fg = "red")
279+
celLabel.grid(row = 2, column = 1, pady = 10, sticky = NW)
280+
281+
fahLabel = Label (top, text = "Fahrenheit: ", font = ("Arial", 16), fg = "blue")
282+
fahLabel.grid(row = 3, column = 1, pady = 10, sticky = NW)
283+
284+
celEntry = Entry (top, width = 10, bd = 5, textvariable = celTempVar)
285+
celEntry.grid(row = 2, column = 1, pady = 10, sticky = NW, padx = 125 )
286+
287+
288+
fahEntry = Entry (top, width = 10, bd = 5, textvariable = fahTempVar)
289+
fahEntry.grid(row = 3, column = 1, pady = 10, sticky = NW, padx = 125 )
290+
291+
convertButton =Button (top, text = "Convert", font = ("Arial", 8, "bold"), relief = RAISED, bd=5, justify = CENTER, highlightbackground = "red", overrelief = GROOVE, activebackground = "green", activeforeground="blue", command = convert)
292+
convertButton.grid(row = 4, column = 1, ipady = 8, ipadx = 12, pady = 5, sticky = NW, padx = 55)
293+
294+
resetButton = Button (top, text = "Reset", font = ("Arial", 8, "bold"), relief = RAISED, bd=5, justify = CENTER, highlightbackground = "red", overrelief = GROOVE, activebackground = "green", activeforeground="blue", command = reset)
295+
resetButton.grid(row = 4, column = 2,ipady = 8, ipadx = 12, pady = 5, sticky = NW)
296+
297+
298+
###################################################################################################################################################################################
299+
300+
def sensex(event):
301+
webbrowser.open_new(r"https://www.google.com/search?q=sensex%20today%20live%20chart")
302+
def nifty(event):
303+
webbrowser.open_new(r"https://www.google.com/search?q=nifty%20today%20live%20chart")
304+
def gold(event):
305+
webbrowser.open_new(r"https://www.google.com/search?q=gold%20today%20live%20chart")
306+
def silver(event):
307+
webbrowser.open_new(r"https://www.moneycontrol.com/commodity/silver-price.html")
308+
309+
####################################################################################
310+
311+
#Hovering
312+
def color_config(widget, color, event):
313+
widget.configure(foreground=color)
314+
315+
text =Label(root, text="SENSEX",font = ("Arial", 14, "bold"))
316+
317+
text.bind("<Enter>", partial(color_config, text, "red"))
318+
text.bind("<Leave>", partial(color_config, text, "blue"))
319+
text.pack()
320+
text.bind("<Button-1>",sensex)
321+
text.place(x=350,y=120)
322+
text =Label(root, text="NIFTY",font = ("Arial", 14, "bold"))
323+
324+
text.bind("<Enter>", partial(color_config, text, "red"))
325+
text.bind("<Leave>", partial(color_config, text, "blue"))
326+
text.pack()
327+
text.bind("<Button-1>",nifty)
328+
text.place(x=350,y=150)
329+
330+
text =Label(root, text="GOLD",font = ("Arial", 14, "bold"))
331+
332+
text.bind("<Enter>", partial(color_config, text, "red"))
333+
text.bind("<Leave>", partial(color_config, text, "blue"))
334+
text.pack()
335+
text.bind("<Button-1>",gold)
336+
text.place(x=350,y=180)
337+
338+
text =Label(root, text="SILVER",font = ("Arial", 14, "bold"))
339+
340+
text.bind("<Enter>", partial(color_config, text, "red"))
341+
text.bind("<Leave>", partial(color_config, text, "blue"))
342+
text.pack()
343+
text.bind("<Button-1>",silver)
344+
text.place(x=350,y=210)
345+
346+
####################################################################################################
347+
348+
#TEMPERATURE CONVERTER
349+
widget = Button(root, text="Temperature converter", bg="white" , fg="red",font = ("Arial", 14, "bold"), relief = RAISED, bd=5, justify = CENTER, highlightbackground = "red", overrelief = GROOVE, activebackground = "green", activeforeground="blue", command=TemperatureConverter).place(x=50,y=120)
350+
widget = Button(root, text="Length Converter", bg="white" , fg="red",font = ("Arial", 14, "bold"), relief = RAISED, bd=5, justify = CENTER, highlightbackground = "red", overrelief = GROOVE, activebackground = "green", activeforeground="blue", command=LengthConverter).place(x=50,y=180)
351+
widget = Button(root, text="Area Converter", bg="white" , fg="red",font = ("Arial", 14, "bold"), relief = RAISED, bd=5, justify = CENTER, highlightbackground = "red", overrelief = GROOVE, activebackground = "green", activeforeground="blue", command=AreaConverter).place(x=50,y=240)
352+
widget = Button(root, text="Currency converter", bg="white" , fg="red",font = ("Arial", 14, "bold"), relief = RAISED, bd=5, justify = CENTER, highlightbackground = "red", overrelief = GROOVE, activebackground = "green", activeforeground="blue", command=CurrencyConverter).place(x=50,y=60)
353+
widget = Button(root, text="Weight Converter", bg="white" , fg="red",font = ("Arial", 14, "bold"), relief = RAISED, bd=5, justify = CENTER, highlightbackground = "red", overrelief = GROOVE, activebackground = "green", activeforeground="blue", command=WeightConverter).place(x=50,y=300)
354+
355+
root.mainloop()

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /