#-*- 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()