- #! /usr/bin/env python
- #coding=utf-8
- '''
- 除法在连续运算时,没法运算小数位,因为设置的是int,会直接取整
- '''
- from Tkinter import *
- root = Tk(className = "计算器")
- root.geometry("500x580")
- class App:
- def __init__(self, master):
- frame1 = Frame(master,borderwidth = 10)
- frame1.pack()
- frame2 = Frame(master,borderwidth = 10)
- frame2.pack()
- frame3 = Frame(master,borderwidth = 10)
- frame3.pack()
- Button(frame2, text = "1",font = ("Courier 20 bold roman"),command=lambda: self.callback(1) ).grid(row=0,column=0)
- Button(frame2, text = "2",font = ("Courier 20 bold roman"),command=lambda: self.callback(2) ).grid(row=0,column=1)
- Button(frame2, text = "3",font = ("Courier 20 bold roman"),command=lambda: self.callback(3) ).grid(row=0,column=2)
- Button(frame2, text = "4",font = ("Courier 20 bold roman"),command=lambda: self.callback(4) ).grid(row=1,column=0)
- Button(frame2, text = "5",font = ("Courier 20 bold roman"),command=lambda: self.callback(5) ).grid(row=1,column=1)
- Button(frame2, text = "6",font = ("Courier 20 bold roman"),command=lambda: self.callback(6) ).grid(row=1,column=2)
- Button(frame2, text = "7",font = ("Courier 20 bold roman"),command=lambda: self.callback(7) ).grid(row=2,column=0)
- Button(frame2, text = "8",font = ("Courier 20 bold roman"),command=lambda: self.callback(8) ).grid(row=2,column=1)
- Button(frame2, text = "9",font = ("Courier 20 bold roman"),command=lambda: self.callback(9) ).grid(row=2,column=2)
- Button(frame2, text = "0",font = ("Courier 20 bold roman"),command=lambda: self.callback(0) ).grid(row=3,column=0)
- Button(frame2, text = "+",font = ("Courier 20 bold roman"),command=lambda: self.callback1("+") ).grid(row=3,column=1)
- Button(frame2, text = "-",font = ("Courier 20 bold roman"),command=lambda: self.callback1("-") ).grid(row=3,column=2)
- Button(frame2, text ="*",font = ("Courier 20 bold roman"),command=lambda: self.callback1("*") ).grid(row=4,column=1)
- Button(frame2, text ="/",font = ("Courier 20 bold roman"),command=lambda: self.callback1("/") ).grid(row=4,column=2)
- Button(frame2, text="=",font = ("Courier 20 bold roman"),command=self.result).grid(row=4,column=0)
- Button(frame3, text="clear",font = ("Courier 20 bold roman"),command=lambda: self.clear() ).grid()
- label_1 = Label(frame1,text="输入数字")
- label_1.pack()
- self.a = IntVar()
- self.a.set(0)
- e1 = Entry(frame1,font = ("Courier 20 bold roman"),textvariable = self.a)
- e1.pack(padx=20,pady = 5)
- #label_2 = Label(frame1,text="第二次输入数字")
- #label_2.pack()
- #self.b = IntVar()
- #self.b.set(0)
- #e2 = Entry(frame1,font = ("Courier 20 bold roman"),textvariable=self.b)
- #e2.pack(padx=20,pady = 5)
- label_3 = Label(frame1,text="运算符号")
- label_3.pack()
- self.c = IntVar()
- self.c.set("")
- e3 = Entry(frame1,font = ("Courier 20 bold roman"), textvariable = self.c)
- e3.pack(padx=20,pady = 5)
- label_4 = Label(frame1,text="运算结果")
- label_4.pack()
- self.d = IntVar()
- self.d.set(0)
- e4 = Entry(frame1,font = ("Courier 20 bold roman"), textvariable = self.d)
- e4.pack(padx=20,pady = 5)
- #算式的左数
- self.left = 0
- #算式的右数
- self.right = 0
- #在标签中显示值的
- self.i = 0
- #实现多位数的
- self.j = 0
- #连续多次运算时,保存左数的
- self.k = 0
- #连续多次运算
- #self.l = 0
- #运算符
- self.accept_sign = ""
- def callback1(self,t):
- if t == "+":
- self.c.set(t)
- self.result()
- self.accept_sign = "+"
- elif t == "-":
- self.c.set(t)
- self.result()
- self.accept_sign = "-"
- elif t == "*":
- self.c.set(t)
- self.result()
- self.accept_sign = "*"
- else:
- self.c.set(t)
- self.result()
- self.accept_sign = "/"
- if self.k == 0:
- self.left = self.a.get()
- else:
- self.left = self.k
- self.j = 0
- #self.l += 1
- def callback(self,t):
- if self.j == 0:
- self.i = t
- self.a.set(self.i)
- if self.j == 1:
- self.i = self.i * 10 + t
- self.a.set(self.i)
- if self.j == 2:
- self.i = self.i * 10 + t
- self.a.set(self.i)
- if self.j == 3:
- self.i = self.i * 10 + t
- self.a.set(self.i)
- if self.j == 4:
- self.i = self.i * 10 + t
- self.a.set(self.i)
- if self.j == 5:
- self.i = self.i * 10 + t
- self.a.set(self.i)
- if self.j == 6:
- self.i = self.i * 10 + t
- self.a.set(self.i)
- if self.j == 7:
- self.i = self.i * 10 + t
- self.a.set(self.i)
- if self.j == 8:
- self.i = self.i * 10 + t
- self.a.set(self.i)
- self.j += 1
- def result(self):
- self.right = self.a.get()
- if self.accept_sign == "+":
- self.d.set(self.left + self.right)
- if self.accept_sign == "-":
- self.d.set(self.left - self.right)
- if self.accept_sign == "*":
- self.d.set(self.left * self.right)
- if self.accept_sign == "/":
- self.d.set(float(self.left) / self.right)
- else:
- pass
- self.k = self.d.get()
- self.j = 0
- #self.l = 0
- def clear(self):
- self.accept_sign = ""
- self.a.set(0)
- self.c.set("")
- self.d.set(0)
- self.j = 0
- self.k = 0
- self.left = 0
- self.right = 0
- #self.l = 0
- App(root)
- root.mainloop()
- #该片段来自于http://www.codesnippet.cn/detail/241020136633.html
来源: http://www.codesnippet.cn/detail/241020136633.html