PS: Если кто-нибудь использует этот код, дайте мне кредиты
Код: Выделить всё
#!/usr/bin/env python
# coding: utf-8
# In[ ]:
from tkinter import *
root = Tk()
root.title('Numerical Converter')
root.config(bg="DarkKhaki")
menu = Menu(root)
root.config(menu=menu)
xhh= 340
yhh= 270
xx = int(int(root.winfo_screenwidth()/2)- int(xhh/2))
yy = int(int(root.winfo_screenheight()/2)- int(yhh/2))
root.geometry(f"{xhh}x{yhh}+{xx}+{yy}")
submenu = Menu(menu)
menu.add_cascade(label='About', menu=submenu)
submenu.add_command(label='This application is created by Pradyumna P Rao.\n\nTo get the code of the application visit www.github.com/pradyumnaprao/numbersystemconversions')
Label(root, text='Binary', bg='DarkKhaki',font=("gabriola",20,"bold",'italic')).grid(row=0, column=0,sticky=W)
e_b = Entry(root, width=25, borderwidth=5, bg='AntiqueWhite',font=("helvetica",10,"bold"))
e_b.grid(row=0, column=1, columnspan=3, padx=20, pady=10)
Label(root, text='Decimal ', bg='DarkKhaki',font=("gabriola",20,"bold",'italic')).grid(row=1, column=0,sticky=W)
e_D = Entry(root, width=25, borderwidth=5, bg='AntiqueWhite',font=("helvetica",10,"bold"))
e_D.grid(row=1, column=1, columnspan=3, padx=20, pady=10)
Label(root, text='Octal', bg='DarkKhaki',font=("gabriola",20,"bold",'italic')).grid(row=2, column=0,sticky=W)
e_O = Entry(root, width=25, borderwidth=5, bg='AntiqueWhite',font=("helvetica",10,"bold"))
e_O.grid(row=2, column=1, columnspan=3, padx=20, pady=10)
Label(root, text='Hexadecimal', bg='DarkKhaki',font=("gabriola",20,"bold",'italic')).grid(row=3, column=0,sticky=W)
e_H = Entry(root, width=25, borderwidth=5, bg='AntiqueWhite',font=("helvetica",10,"bold"))
e_H.grid(row=3, column=1, columnspan=3, padx=20, pady=10)
# Binary to deci, octal and hexa
def popup(labeltext):
pop =Toplevel(root)
pop.title('ERROR')
xh= 180
yh= 90
x = int(int(root.winfo_screenwidth()/2)- int(xh/2))
y = int(int(root.winfo_screenheight()/2)- int(xh/2))
pop.geometry(f"{xh}x{yh}+{x}+{y}")
label =Label(pop,text=labeltext, font=('calibre',10,'bold'))
label.pack(pady=10)
my_frame = Frame(pop)
my_frame.pack(pady=5)
b1=Button(my_frame,text="Okay",bd=1,bg='DarkOrchid',command=lambda:pop.destroy())
b1.grid(row=0,column=1)
def btd(number):
global conv
conv = "bintodeci"
number=str(number)
leng = len(number)
b = 0
for i in number:
c = int(i) * pow(2, leng - 1)
b = b + c
leng = leng-1
return b
def bintodeci(number):
bin_set= {'0','1'}
x = number
x=set(x)
if bin_set == x or x == {'0'} or x == {'1'}:
return btd(str(number))
else:
e_D.delete(0, END)
e_O.delete(0, END)
e_H.delete(0, END)
popup("Enter 0s and 1s only")
def bto(number):
b = bintodeci(number)
s=''
while b > 0.1:
a = b % 8
b = b/8
s = s+str(int(a))
return int(s[::-1])
def bintooctal(number):
bin_set= {'0','1'}
x = number
x=set(x)
if bin_set == x or x == {'0'} or x == {'1'}:
return bto(str(number))
else:
e_D.delete(0, END)
e_O.delete(0, END)
e_H.delete(0, END)
popup("Enter 0s and 1s only")
def bth(number):
number = str(number)
if not len(number) % 4 == 0:
number = ('0'*(4-len(number) % 4)) + number
diction = {'0000': 0, '0001': 1, '0010': 2, '0011': 3, '0100': 4, '0101': 5, '0110': 6, '0111': 7, '1000': 8, '1001': 9, '1010': 'A', '1011': 'B', '1100': 'C', '1101': 'D', '1110': 'E', '1111': 'F'}
h, g = '', ''
y, z = 0, 4
while y < len(number):
g = number[y:z]
h = h + str(diction[g])
y += 4
z += 4
return h
def bintohexa(number):
number=str(number)
bin_set= {'0','1'}
x = number
x=set(x)
if bin_set == x or x == {'0'} or x == {'1'}:
return bth(str(number))
else:
e_D.delete(0, END)
e_O.delete(0, END)
e_H.delete(0, END)
popup("Enter 0s and 1s only")
# Decimal to Binary, Octal And hexa
def decitobin(number):
number = int(number)
s =''
while number>0.1:
a = number % 2
number = number/2
s = s+str(int(a))
return int(s[::-1])
def decitooctal(number):
number = int(number)
s=''
while number>0.1:
a=number%8
number=number/8
s=s+str(int(a))
return int(s[::-1])
def decitohexa(number):
number=int(number)
diction={'0':'0','1':'1','2':'2','3':'3','4':'4','5':'5','6':'6','7':'7','8':'8','9':'9','10':'A','11':'B','12':'C','13':'D','14':'E','15':'F'}
s=''
while(number>0):
a=number%16
number=number/16
number=int(number)
s=s+diction[str(a)]
return s[::-1]
# Octal to Binary, Decimal and hexadecimal
def octaltobin(number):
number=str(number)
number = octaltodeci(number)
h=decitobin(number)
return h
def octaltodeci(number):
leng = len(number)
b= 0
for i in number:
c = int(i) * pow(8,leng - 1)
b = b + c
leng = leng -1
return b
def octaltohexa(number):
number =octaltobin(number)
h = bintohexa(number)
return h
# Hexdecimal to binary, Deci, octal
def hexatobin(number):
number=str(number)
diction={'0':'0000','1':'0001','2':'0010','3':'0011','4':'0100','5':'0101','6':'0110','7':'0111','8':'1000','9':'1001','A':'1010','B':'1011','C':'1100','D':'1101','E':'1110','F':'1111','a':'1010','b':'1011','c':'1100','d':'1101','e':'1110','f':'1111'}
h,g='',''
y,z=0,4
for i in number:
h = h + str(diction[i])
return int(h)
def hexatodeci(number):
leng = len(number)
b= 0
diction = {'A':10,'B':11,'C':12,'D':13,'E':14,'F':15,'a':10,'b':11,'c':12,'d':13,'e':14,'f':15}
for i in number:
if i.isdigit():
c = int(i) * pow(16,leng - 1)
b = b + c
else:
c =diction[i] * pow(16,leng - 1)
b = b + c
leng = leng -1
return int(b)
def hexatooctal(number):
number=str(number)
diction={'0':'0000','1':'0001','2':'0010','3':'0011','4':'0100','5':'0101','6':'0110','7':'0111','8':'1000','9':'1001','A':'1010','B':'1011','C':'1100','D':'1101','E':'1110','F':'1111','a':'1010','b':'1011','c':'1100','d':'1101','e':'1110','f':'1111'}
diction2={'000':0,'001':1,'010':2,'011':3,'100':4,'101':5,'110':6,'111':7}
g,f,j,h='','','',''
y,z=0,3
for i in number:
h = h + str(diction[i])
if not len(h)%3 ==0:
h = ('0'*(3-len(h)%3)) + h
while(y