#计算器 import tkinter import math import tkinter.messagebox class jsq: #页面布局方法 def __init__(self): self.root=tkinter.Tk() self.root.minsize(330,440) #禁止屏幕变化 self.root.resizable(width=False,height=False) self.root.title("小熊计算器") #设置显示面板的变量 self.result=tkinter.StringVar() self.result.set(0) #设置一个全局变量 运算数字和符号的列表 self.lists=[] #添加一个是否被按下运算符的标志位 self.ispresssign=False #数字是否按下 self.numsign=False #界面布局 self.layout() self.myfunc() self.root.mainloop() # 定义操作函数 def myfunc(self): # 创建总菜单 allmenu = tkinter.Menu(self.root) # 添加子菜单 filemenu = tkinter.Menu(allmenu, tearoff=0) # 添加选项卡 filemenu.add_command(label="●标准型(T) Alt+1", command=self.myfunc) filemenu.add_command(label="科学型(S) ALt+2", command=self.myfunc) filemenu.add_command(label="程序员(P) Alt+3", command=self.myfunc) filemenu.add_command(label="统计信息(A) Alt+4", command=self.myfunc) filemenu.add_separator() filemenu.add_command(label="历史记录(Y) Ctel+H", command=self.myfunc) filemenu.add_command(label="数字分组", command=self.myfunc) filemenu.add_separator() filemenu.add_command(label="●基本(B) Ctrl+F4", command=self.myfunc) filemenu.add_command(label="单位转换(U) Ctel+U", command=self.myfunc) filemenu.add_command(label="日期计算(D) Ctrl+E", command=self.myfunc) filemenu.add_command(label="工作表(W)", command=self.myfunc) allmenu.add_cascade(label="查看(V)", menu=filemenu) # 添加子菜单 filemenu = tkinter.Menu(allmenu, tearoff=0) filemenu.add_command(label="复制(C) Ctrl+C", command=self.myfunc) filemenu.add_command(label="粘帖(P) Ctrl+V", command=self.myfunc) filemenu.add_separator() filemenu.add_command(label="历史记录(H)", command=self.myfunc) allmenu.add_cascade(label="编辑(E)", menu=filemenu) # 添加子菜单 filemenu = tkinter.Menu(allmenu, tearoff=0) filemenu.add_command(label="查看帮助(V) F1", command=self.myfunc) filemenu.add_separator() filemenu.add_command(label="关于计算器(A)", command=self.myfunc) allmenu.add_cascade(label="帮助(H)", menu=filemenu) # 摆放菜单 self.root.config(menu=allmenu) #界面组件摆放 def layout(self): #显示面板 show = tkinter.Label(self.root, textvariable=self.result, bg="white", font=("隶书", 28,"bold"), anchor="e",borderwidth=10) show.place(x=20, y=20, height=50, width=290) #数字及功能键摆放 btn1 = tkinter.Button(self.root,bd=3, text="MC",command=self.mc) btn1.place(x=20, y=80, height=50, width=50) btn1 = tkinter.Button(self.root,bd=3, text="MR",command=self.mr) btn1.place(x=80, y=80, height=50, width=50) btn1 = tkinter.Button(self.root,bd=3, text="MS",command=self.ms) btn1.place(x=140, y=80, height=50, width=50) btn1 = tkinter.Button(self.root,bd=3, text="M+",command=self.mjia) btn1.place(x=200, y=80, height=50, width=50) btn1 = tkinter.Button(self.root,bd=3, text="M-",command=self.mjian) btn1.place(x=260, y=80, height=50, width=50) #功能键 btn1 = tkinter.Button(self.root,bd=3, text="←", command=self.delete) btn1.place(x=20, y=140, height=50, width=50) btn1 = tkinter.Button(self.root, bd=3,text="CE", command=self.clearce) btn1.place(x=80, y=140, height=50, width=50) btn1 = tkinter.Button(self.root, bd=3,text="C", command=self.clear) btn1.place(x=140, y=140, height=50, width=50) btn1 = tkinter.Button(self.root,bd=3, text="±", command=self.zhengfu) btn1.place(x=200, y=140, height=50, width=50) btn1 = tkinter.Button(self.root,bd=3, text="√", command=self.sqr) btn1.place(x=260, y=140, height=50, width=50) # 7~9 btn1 = tkinter.Button(self.root, bd=3,text="7", command=lambda: self.pressnum("7")) btn1.place(x=20, y=200, height=50, width=50) btn1 = tkinter.Button(self.root, bd=3,text="8", command=lambda: self.pressnum("8")) btn1.place(x=80, y=200, height=50, width=50) btn1 = tkinter.Button(self.root, bd=3,text="9", command=lambda: self.pressnum("9")) btn1.place(x=140, y=200, height=50, width=50) btn1 = tkinter.Button(self.root,bd=3, text="/", command=lambda: self.presscompute("/")) btn1.place(x=200, y=200, height=50, width=50) btn1 = tkinter.Button(self.root,bd=3, text="%", command=lambda: self.presscompute("%")) btn1.place(x=260, y=200, height=50, width=50) # 4~6 btn1 = tkinter.Button(self.root, bd=3,text="4", command=lambda: self.pressnum("4")) btn1.place(x=20, y=260, height=50, width=50) btn1 = tkinter.Button(self.root, bd=3,text="5", command=lambda: self.pressnum("5")) btn1.place(x=80, y=260, height=50, width=50) btn1 = tkinter.Button(self.root, bd=3,text="6", command=lambda: self.pressnum("6")) btn1.place(x=140, y=260, height=50, width=50) btn1 = tkinter.Button(self.root,bd=3, text="*", command=lambda: self.presscompute("*")) btn1.place(x=200, y=260, height=50, width=50) btn1 = tkinter.Button(self.root,bd=3, text="1/x", command=self.fenshu) btn1.place(x=260, y=260, height=50, width=50) # 1~3 btn1 = tkinter.Button(self.root,bd=3, text="1", command=lambda: self.pressnum("1")) btn1.place(x=20, y=320, height=50, width=50) btn1 = tkinter.Button(self.root,bd=3, text="2", command=lambda: self.pressnum("2")) btn1.place(x=80, y=320, height=50, width=50) btn1 = tkinter.Button(self.root,bd=3, text="3", command=lambda: self.pressnum("3")) btn1.place(x=140, y=320, height=50, width=50) btn1 = tkinter.Button(self.root,bd=3, text="-", command=lambda: self.presscompute("-")) btn1.place(x=200, y=320, height=50, width=50) btn1 = tkinter.Button(self.root,bd=3, text="=", command=self.eqal) btn1.place(x=260, y=320, height=110, width=50) # 0 . + btn1 = tkinter.Button(self.root,bd=3, text="0", command=lambda: self.pressnum("0")) btn1.place(x=20, y=380, height=50, width=110) btn1 = tkinter.Button(self.root,bd=3, text=".", command=lambda: self.pressnum(".")) btn1.place(x=140, y=380, height=50, width=50) btn1 = tkinter.Button(self.root,bd=3, text="+", command=lambda: self.presscompute("+")) btn1.place(x=200, y=380, height=50, width=50) #数字方法 def pressnum(self,num): #判断是否按下数字 if self.numsign==True: self.result.set("0") self.numsign=False #判断值是否为0 if self.result.get()=="0": self.result.set(num) if num==".": #如果先按下小数点 前面加0 self.result.set("0"+num) else: #只能有一个小数点 if self.result.get().count(".")==0: #获取当前的值存入变量 oldnum=self.result.get() #将变量中的值和后面输入的值拼接 self.result.set(oldnum+num) elif num !=".": # 获取当前的值存入变量 oldnum = self.result.get() # 将变量中的值和后面输入的值拼接 self.result.set(oldnum + num) self.numsign=False self.ispresssign=True #运算函数 def presscompute(self,sign): if self.ispresssign==True: self.lists.append(self.result.get()) self.lists.append(sign) self.ispresssign=False self.numsign=True #获取运算结果 def eqal(self): self.lists.append(self.result.get()) computestr="".join(self.lists) if "+-*/=" in computestr: computestr=computestr[0:-1] #eval endnum=eval(computestr) #将运算结果显示在屏幕上 self.result.set(endnum) #清空列表 self.lists.clear() #判断数字是否按下 self.numsign=True if endnum==float(endnum): self.result.set(round(endnum,3)) #清空操作(C) def clear(self): self.lists = [] self.result.set("0") # 清空操作(CE) def clearce(self): self.result.set("0") # 删除操作 def delete(self): if self.result.get() == "" or self.result.get == "0": self.result.set("0") return else: #返回界面字符串长度 changdu = len(self.result.get()) if changdu > 1: #在屏幕上获取字符串给变量 strnum = self.result.get() #取片操作 strnum = strnum[0:changdu - 1] self.result.set(strnum) else: self.result.set("0") #正负数操作 def zhengfu(self): strnum = self.result.get() #判断一个数是否有负号 if strnum[0] == "-": self.result.set(strnum[1:]) elif strnum[0] != "-" and strnum != "0": self.result.set("-" + strnum) # 开平方 def sqr(self): import math strnum = float(self.result.get()) #开平方操作 endnum = math.sqrt(strnum) self.result.set(endnum) # 1/x def fenshu(self): if self.result.get()=="0": self.result.set("2B,除数不能为0") else: strnum = float(self.result.get()) endnum = 1 / strnum self.result.set(endnum) #MC def mc(self): tkinter.messagebox.showinfo(title="MC功能",message="正在努力开发中^_^") #MR def mr(self): tkinter.messagebox.showinfo(title="MR功能", message="正在努力开发中^_^") #MS def ms(self): tkinter.messagebox.showinfo(title="MS功能", message="正在努力开发中^_^") #M+ def mjia(self): tkinter.messagebox.showinfo(title="M+功能", message="正在努力开发中^_^") #M- def mjian(self): tkinter.messagebox.showinfo(title="M-功能",message="正在努力开发中^_^") #实例化对象 ll=jsq()