from Tkinter import x1 x2 operation функция кнопок ввода цифр если дей

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
from Tkinter import *
x1 = ''
x2 = ''
operation = ''
# функция кнопок ввода цифр
# если действие еще не задано, заполняется х1, а если задано - х2
# и значение переменной отражается на соотв. виджете
def press(figure):
global x1, operation, x2
if operation == '':
x1 = x1 + str(figure)
lblx1.configure(text=x1)
else:
x2 = x2 + str(figure)
lblx2.configure(text=x2)
def pressdot():
global x1, operation, x2
if operation == '':
x1 = x1 + '.'
lblx1.configure(text=x1)
else:
x2 = x2 + '.'
lblx2.configure(text=x2)
# функция операций
def sign(x): global operation; operation = x; lbloperation.configure(text=operation)
# извлечение корня отличается тем, что собственно извлечение происходит
# по нажатию кнопки 'sqrt', а не '='
def sqrt(): global x1; lblresult.configure(text=float(x1)**(0.5))
# функция кнопки = , при нажатии происходит математическая операция
# в зависимости от содержания переменной operation
def equal():
global x1, operation, x2
if operation == '+':
lblresult.configure(text=float(x1)+float(x2))
elif operation == '-':
lblresult.configure(text=float(x1)-float(x2))
elif operation == '*':
lblresult.configure(text=float(x1)*float(x2))
elif operation == '/':
lblresult.configure(text=float(x1)/float(x2))
elif operation == '':
lblresult.configure(text="O_o")
def c():
global x1, operation, x2
x1 = ''
x2 = ''
operation = ''
lblx1.configure(text=".")
lbloperation.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"))
lbloperation = Label(frame, text='.', width=5, font=("Arial", 16, "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)
lbloperation.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)
# кнопки 0-9
btns = []
for num in range(0,10):
btns.append(Button(frame,
text=str(num),
width=3,
font=("Arial", 20, "bold"),
command= lambda: press(num)))
btns[0].grid(row=5, column=0, padx=4, pady=4)
btns[1].grid(row=4, column=0, pady=4)
btns[2].grid(row=4, column=1)
btns[3].grid(row=4, column=2)
btns[4].grid(row=3, column=0, pady=4)
btns[5].grid(row=3, column=1)
btns[6].grid(row=3, column=2)
btns[7].grid(row=2, column=0, pady=4)
btns[8].grid(row=2, column=1)
btns[9].grid(row=2, column=2)
# кнопка "."
btndot = Button(frame, text=".", width=3, font=("Arial", 20, "bold"), command=pressdot)
btndot.grid(row=5, column=1, padx=4)
btns2 = []
for op in ['+', '*', '-', '/', '=', 'off', 'sqrt', 'C']:
btns2.append(Button(frame,
text=op,
width=3,
font=("Arial", 20, "bold"),
command=lambda:sign(op)))
btns2[0].grid(row=4, column=3, padx=4, rowspan=2) # сложение
btns2[0].configure(height=3)
btns2[1].grid(row=5, column=4, padx=4) # умножение
btns2[2].grid(row=3, column=3) # вычитание
btns2[3].grid(row=4, column=4) # деление
btns2[4].grid(row=5, column=2, padx=4) # равно
btns2[4].configure(command=equal)
btns2[5].grid(row=2, column=4) # выход
btns2[5].configure(command=exit)
btns2[6].grid(row=3, column=4) # извл. кв. корня
btns2[6].configure(command=sqrt)
btns2[7].grid(row=2, column=3) # очистка
btns2[7].configure(command=c)
root.mainloop()