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 d903ac0

Browse files
Merge pull request avinashkranjan#1778 from slayerrr12/master
Updated the calculator with some extra functions [GSSOC '23]
2 parents 7568041 + 38cb338 commit d903ac0

File tree

1 file changed

+100
-114
lines changed

1 file changed

+100
-114
lines changed

‎Binary-Calculator-GUI/script.py

Lines changed: 100 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -1,124 +1,87 @@
11
from tkinter import *
2+
23
window = Tk()
34
window.title("Standard Binary Calculator")
45
window.resizable(0, 0)
56

6-
7+
# Function to clear the entry field
78
def f1():
89
s = e1_val.get()
910
e1.delete(first=0, last=len(s))
1011

11-
12+
# Function to add "1" to the entry field
1213
def f2():
1314
s = e1_val.get()
1415
e1.insert(END, "1")
1516

16-
17+
# Function to add "0" to the entry field
1718
def f3():
1819
s = e1_val.get()
1920
e1.insert(END, "0")
2021

21-
22+
# Function to evaluate the expression and display the result
2223
def f4():
23-
x = 0
2424
s = e1_val.get()
25-
for i in range(0, len(s)):
26-
if s[i] == '/' or s[i] == 'X' or s[i] == '+' or s[i] == '-':
27-
a = s[0:i]
28-
b = s[i + 1:len(s)]
29-
if s[i] == '-':
30-
x = sub(int(a), int(b))
31-
elif s[i] == '/':
32-
x = int(int(a) / int(b))
33-
elif s[i] == 'X':
34-
x = int(int(a) * int(b))
35-
elif s[i] == '+':
36-
x = int(add(int(a), int(b)))
37-
25+
result = evaluate_expression(s)
3826
e1.delete(first=0, last=len(s))
39-
e1.insert(END, "")
40-
e1.insert(END, str(x))
27+
e1.insert(END, result)
28+
29+
# Function to add "+" operator to the entry field
30+
def f5():
31+
e1.insert(END, "+")
32+
33+
# Function to add "-" operator to the entry field
34+
def f6():
35+
e1.insert(END, "-")
36+
37+
# Function to add "/" operator to the entry field
38+
def f7():
39+
e1.insert(END, "/")
4140

41+
# Function to add "X" operator to the entry field
42+
def f8():
43+
e1.insert(END, "X")
44+
45+
# Function to negate the sign of the number in the entry field
46+
def negate():
47+
s = e1_val.get()
48+
if s.startswith("-"):
49+
e1_val.set(s[1:])
50+
else:
51+
e1_val.set("-" + s)
4252

43-
def bin_to_dec(n):
53+
# Function to delete the last character in the entry field
54+
def backspace():
55+
s = e1_val.get()
56+
e1_val.set(s[:-1])
57+
58+
# Function to convert binary to decimal
59+
def binary_to_decimal(n):
4460
num = n
4561
dec_value = 0
4662
base = 1
4763
temp = num
48-
while (temp):
64+
while temp:
4965
last_digit = temp % 10
50-
temp = int(temp / 10)
51-
66+
temp = temp // 10
5267
dec_value += last_digit * base
5368
base = base * 2
5469
return dec_value
5570

56-
57-
def add(x, y):
58-
a = bin_to_dec(x)
59-
b = bin_to_dec(y)
60-
c = a + b
61-
d = bin(c).replace("0b", "")
62-
return d
63-
64-
65-
def sub(x, y):
66-
a = bin_to_dec(x)
67-
b = bin_to_dec(y)
68-
c = a - b
69-
d = bin(c).replace("0b", "")
70-
return d
71-
72-
73-
def f5():
74-
x = 0
75-
s = e1_val.get()
76-
flag = 1
77-
for i in range(0, len(s)):
78-
if s[i] == '/' or s[i] == 'X' or s[i] == '+' or s[i] == '-':
79-
flag = 0
80-
a = s[0:i]
81-
b = s[i + 1:len(s)]
82-
if s[i] == '-':
83-
x = sub(int(a), int(b))
84-
elif s[i] == '/':
85-
x = int(int(a) / int(b))
86-
elif s[i] == 'X':
87-
x = int(int(a) * int(b))
88-
elif s[i] == '+':
89-
x = int(add(int(a), int(b)))
90-
if flag == 0:
91-
e1.delete(first=0, last=len(s))
92-
e1.insert(END, str(x))
93-
e1.insert(END, "+")
94-
95-
96-
def f6():
97-
x = 0
98-
s = e1_val.get()
99-
flag = 1
100-
for i in range(0, len(s)):
101-
if s[i] == '/' or s[i] == 'X' or s[i] == '+' or s[i] == '-':
102-
flag = 0
103-
a = s[0:i]
104-
b = s[i + 1:len(s)]
105-
if s[i] == '-':
106-
x = sub(int(a), int(b))
107-
elif s[i] == '/':
108-
x = int(int(a) / int(b))
109-
elif s[i] == 'X':
110-
x = int(int(a) * int(b))
111-
elif s[i] == '+':
112-
x = int(add(int(a), int(b)))
113-
if flag == 0:
114-
e1.delete(first=0, last=len(s))
115-
e1.insert(END, str(x))
116-
e1.insert(END, "-")
117-
118-
119-
def f7():
71+
# Function to convert decimal to binary
72+
def decimal_to_binary(n):
73+
if n == 0:
74+
return '0'
75+
binary = ''
76+
while n > 0:
77+
binary = str(n % 2) + binary
78+
n = n // 2
79+
return binary
80+
81+
# Function to evaluate the expression
82+
def evaluate_expression(expression):
12083
x = 0
121-
s = e1_val.get()
84+
s = expression
12285
flag = 1
12386
for i in range(0, len(s)):
12487
if s[i] == '/' or s[i] == 'X' or s[i] == '+' or s[i] == '-':
@@ -134,50 +97,48 @@ def f7():
13497
elif s[i] == '+':
13598
x = int(add(int(a), int(b)))
13699
if flag == 0:
137-
e1.delete(first=0, last=len(s))
138-
e1.insert(END, str(x))
139-
e1.insert(END, "/")
100+
return str(x)
101+
return ""
140102

103+
# Function to perform binary addition
104+
def add(x, y):
105+
a = binary_to_decimal(x)
106+
b = binary_to_decimal(y)
107+
c = a + b
108+
d = decimal_to_binary(c)
109+
return d
141110

142-
def f8():
143-
x = 0
144-
s = e1_val.get()
145-
flag = 1
146-
for i in range(0, len(s)):
147-
if s[i] == '/' or s[i] == 'X' or s[i] == '+' or s[i] == '-':
148-
flag = 0
149-
a = s[0:i]
150-
b = s[i + 1:len(s)]
151-
if s[i] == '-':
152-
x = sub(int(a), int(b))
153-
elif s[i] == '/':
154-
x = int(int(a) / int(b))
155-
elif s[i] == 'X':
156-
x = int(int(a) * int(b))
157-
elif s[i] == '+':
158-
x = int(add(int(a), int(b)))
159-
if flag == 0:
160-
e1.delete(first=0, last=len(s))
161-
e1.insert(END, str(x))
162-
e1.insert(END, "X")
163-
111+
# Function to perform binary subtraction
112+
def sub(x, y):
113+
a = binary_to_decimal(x)
114+
b = binary_to_decimal(y)
115+
c = a - b
116+
d = decimal_to_binary(c)
117+
return d
164118

119+
# Creating a StringVar to store the value of the entry field
165120
e1_val = StringVar()
121+
122+
# Creating the entry field
166123
e1 = Entry(window, textvariable=e1_val, width=50)
167124
e1.grid(row=0, column=0, columnspan=4)
168125

126+
# Creating number buttons
169127
b1 = Button(window, text="1", width=8, height=2, command=f2)
170128
b1.grid(row=1, column=0)
171129

172130
b0 = Button(window, text="0", width=8, height=2, command=f3)
173131
b0.grid(row=1, column=1)
174132

133+
# Creating clear button
175134
clear = Button(window, text="C", width=8, height=2, command=f1)
176135
clear.grid(row=1, column=2)
177136

137+
# Creating equals button
178138
beq = Button(window, text="=", width=8, height=2, command=f4)
179139
beq.grid(row=1, column=3)
180140

141+
# Creating operator buttons
181142
badd = Button(window, text="+", width=8, height=2, command=f5)
182143
badd.grid(row=2, column=0)
183144

@@ -190,4 +151,29 @@ def f8():
190151
bdiv = Button(window, text="/", width=8, height=2, command=f7)
191152
bdiv.grid(row=2, column=3)
192153

154+
# Creating additional buttons
155+
bnegate = Button(window, text="+/-", width=8, height=2, command=negate)
156+
bnegate.grid(row=3, column=0)
157+
158+
bbackspace = Button(window, text="⌫", width=8, height=2, command=backspace)
159+
bbackspace.grid(row=3, column=1)
160+
161+
bbinary = Button(window, text="Bin to Dec", width=12, height=2, command=on_binary)
162+
bbinary.grid(row=3, column=2)
163+
164+
bdecimal = Button(window, text="Dec to Bin", width=12, height=2, command=on_decimal)
165+
bdecimal.grid(row=3, column=3)
166+
167+
# Function to convert binary to decimal and update entry field
168+
def on_binary():
169+
s = e1_val.get()
170+
decimal = binary_to_decimal(s)
171+
e1_val.set(decimal_to_binary(decimal))
172+
173+
# Function to convert decimal to binary and update entry field
174+
def on_decimal():
175+
s = e1_val.get()
176+
binary = decimal_to_binary(int(s))
177+
e1_val.set(binary)
178+
193179
window.mainloop()

0 commit comments

Comments
(0)

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