#-*- coding:cp1251 -*-
from Tkinter import *
""" pyCalc by deluxe, thanks to Sanch0
Калькулятор работает только с 2 числами и одним действием над ними."""
# глобальные переменные
x1=''
x2=''
deistvie=''
# функции батонов ввода цифр и запятой
# если действие еще не задано, заполняется х1, а если задано - х2
# и значение переменной отражается на соотв. виджете
def press1():
global x1, deistvie, x2
if deistvie=='':
x1=x1+'1'
lblx1.configure(text=x1)
else:
x2=x2+'1'
lblx2.configure(text=x2)
def press2():
global x1, deistvie, x2
if deistvie=='':
x1=x1+'2'
lblx1.configure(text=x1)
else:
x2=x2+'2'
lblx2.configure(text=x2)
def press3():
global x1, deistvie, x2
if deistvie=='':
x1=x1+'3'
lblx1.configure(text=x1)
else:
x2=x2+'3'
lblx2.configure(text=x2)
def press4():
global x1, deistvie, x2
if deistvie=='':
x1=x1+'4'
lblx1.configure(text=x1)
else:
x2=x2+'4'
lblx2.configure(text=x2)
def press5():
global x1, deistvie, x2
if deistvie=='':
x1=x1+'5'
lblx1.configure(text=x1)
else:
x2=x2+'5'
lblx2.configure(text=x2)
def press6():
global x1, deistvie, x2
if deistvie=='':
x1=x1+'6'
lblx1.configure(text=x1)
else:
x2=x2+'6'
lblx2.configure(text=x2)
def press7():
global x1, deistvie, x2
if deistvie=='':
x1=x1+'7'
lblx1.configure(text=x1)
else:
x2=x2+'7'
lblx2.configure(text=x2)
def press8():
global x1, deistvie, x2
if deistvie=='':
x1=x1+'8'
lblx1.configure(text=x1)
else:
x2=x2+'8'
lblx2.configure(text=x2)
def press9():
global x1, deistvie, x2
if deistvie=='':
x1=x1+'9'
lblx1.configure(text=x1)
else:
x2=x2+'9'
lblx2.configure(text=x2)
def press0():
global x1, deistvie, x2
if deistvie=='':
x1=x1+'0'
lblx1.configure(text=x1)
else:
x2=x2+'0'
lblx2.configure(text=x2)
def pressdot():
global x1, deistvie, x2
if deistvie=='':
x1=x1+'.'
lblx1.configure(text=x1)
else:
x2=x2+'.'
lblx2.configure(text=x2)
# функции баттонов операций
def slozhit(): global deistvie; deistvie='+'; lbldeistvie.configure(text="+")
def umhozhit():global deistvie; deistvie='*'; lbldeistvie.configure(text="*")
def vychest():global deistvie; deistvie='-'; lbldeistvie.configure(text="-")
def razdelit():global deistvie; deistvie='/'; lbldeistvie.configure(text="/")
def stepen():global deistvie; deistvie='**'; lbldeistvie.configure(text="**")
# извлечение корня отличается тем, что собственно извлечение происходит
# по нажатию кнопки 'sqrt', а не '='
def koren(): global x1; lblresult.configure(text=float(x1)**(0.5))
# функция кнопки = , при нажатии происходит математическая операция
# в зависимости от начинки переменной deistvie
def ravno():
global x1, deistvie, x2
if deistvie=='+':
lblresult.configure(text=float(x1)+float(x2))
elif deistvie=='-':
lblresult.configure(text=float(x1)-float(x2))
elif deistvie=='*':
lblresult.configure(text=float(x1)*float(x2))
elif deistvie=='/':
lblresult.configure(text=float(x1)/float(x2))
elif deistvie=='**':
lblresult.configure(text=float(x1)**float(x2))
elif deistvie=='':
lblresult.configure(text="Fuck You")
def c():
global x1, deistvie, x2
x1=''
x2=''
deistvie=''
lblx1.configure(text=".")
lbldeistvie.configure(text=".")
lblx2.configure(text=".")
lblresult.configure(text=".")
# GUI
root = Tk()
root.title("pyCalc")
frame = Frame(root)
frame.pack()
# лейблы
lblx1 =Label(frame, text='.', width=7, font=("Arial", 12, "bold"))
lbldeistvie=Label(frame, text='.', width=5, font=("Arial", 12, "bold"))
lblx2 =Label(frame, text='.', width=10, font=("Arial", 12, "bold"))
lbltext =Label(frame, text='Result:', width=10, font=("Arial", 15, "bold"))
lblresult =Label(frame, text='.', width=20, font=("Arial", 12, "bold"))
lblx1.grid (row=0, column=0, columnspan=2)
lbldeistvie.grid(row=0, column=2)
lblx2.grid (row=0, column=3, columnspan=2)
lbltext.grid (row=1, column=0, columnspan=2)
lblresult.grid (row=1, column=2, columnspan=3)
# батоны
btn1 =Button(frame, text="1", width=3, font=("Arial", 20, "bold"), command=press1)
btn2 =Button(frame, text="2", width=3, font=("Arial", 20, "bold"), command=press2)
btn3 =Button(frame, text="3", width=3, font=("Arial", 20, "bold"), command=press3)
btn4 =Button(frame, text="4", width=3, font=("Arial", 20, "bold"), command=press4)
btn5 =Button(frame, text="5", width=3, font=("Arial", 20, "bold"), command=press5)
btn6 =Button(frame, text="6", width=3, font=("Arial", 20, "bold"), command=press6)
btn7 =Button(frame, text="7", width=3, font=("Arial", 20, "bold"), command=press7)
btn8 =Button(frame, text="8", width=3, font=("Arial", 20, "bold"), command=press8)
btn9 =Button(frame, text="9", width=3, font=("Arial", 20, "bold"), command=press9)
btn0 =Button(frame, text="0", width=3, font=("Arial", 20, "bold"), command=press0)
btndot=Button(frame, text=".", width=3, font=("Arial", 20, "bold"), command=pressdot)
btn_ravno =Button(frame, text="=", width=3, font=("Arial", 20, "bold"), command=ravno)
btn_slozhit =Button(frame, text="+", width=3, font=("Arial", 20, "bold"), command=slozhit, height=3)
btn_umhozhit=Button(frame, text="*", width=3, font=("Arial", 20, "bold"), command=umhozhit)
btn_vychest =Button(frame, text="-", width=3, font=("Arial", 20, "bold"), command=vychest)
btn_razdelit=Button(frame, text="/", width=3, font=("Arial", 20, "bold"), command=razdelit)
btn_stepen =Button(frame, text="**", width=3, font=("Arial", 20, "bold"), command=stepen)
btn_koren =Button(frame, text="sqrt", width=3, font=("Arial", 20, "bold"), command=koren)
btn_c =Button(frame, text="c", width=3, font=("Arial", 20, "bold"), command=c)
# упаковка батонов
btn1.grid (row=4, column=0, pady=4)
btn2.grid (row=4, column=1)
btn3.grid (row=4, column=2)
btn4.grid (row=3, column=0, pady=4)
btn5.grid (row=3, column=1)
btn6.grid (row=3, column=2)
btn7.grid (row=2, column=0, pady=4)
btn8.grid (row=2, column=1)
btn9.grid (row=2, column=2)
btn0.grid (row=5, column=0, padx=4, pady=4)
btndot.grid(row=5, column=1, padx=4)
btn_ravno.grid (row=5, column=2, padx=4)
btn_slozhit.grid (row=4, column=3, padx=4, rowspan=2)
btn_umhozhit.grid(row=2, column=3)
btn_vychest.grid (row=3, column=3)
btn_razdelit.grid(row=2, column=4)
btn_stepen.grid (row=3, column=4)
btn_koren.grid (row=4, column=4)
btn_c.grid (row=5, column=4, padx=4)
root.mainloop()