import tkinter
import tkinter.messagebox
import math
class Calculator():
def init(self):
self.root = tkinter.Tk()
self.root.minsize(320,441)
self.root.maxsize(320,441)
self.root.title(‘计算器’)
self.root[‘bg’] = ‘#8B8B83’
self.gmenu()
self.layout()
self.root.mainloop()
def gmenu(self):
# 创建总菜单
gmenu = tkinter.Menu(self.root)
# 创建查看菜单
menu1 = tkinter.Menu(gmenu,tearoff = 0)
# 创建下拉菜单的选项
menu1.add_command(label = '标准',command = self.standard)
menu1.add_command(label = '科学',command = self.science)
menu1.add_command(label = '程序员',command = self.programmer)
# 创建下拉菜单的分割线
menu1.add_separator()
menu1.add_command(label = '退出', command = self.root.quit)
# 将下拉菜单添加到总菜单中,并命名为查看
gmenu.add_cascade(label = '查看',menu = menu1)
#创建关于菜单
menu2 = tkinter.Menu(gmenu,tearoff = 0)
#创建下拉菜单的选项
menu2.add_command(label = '版本',command = self.version)
# 将下拉菜单添加到总菜单中,并命名为查看
gmenu.add_cascade(label='关于',menu = menu2)
# 显示总菜单
self.root.config(menu = gmenu)
#菜单关联函数
def standard(self):
tkinter.messagebox.showinfo('标准型','这就是标准型,请点击ok继续使用。')
def science(self):
tkinter.messagebox.showinfo('科学型', '暂不支持,请等待后续更新 . . . ')
def programmer(self):
tkinter.messagebox.showinfo('程序员型', '暂不支持,请等待后续更新 . . . ')
def version(self):
tkinter.messagebox.showinfo('版本号', '计算器 1.0\n持续更新中 . . . ')
#布局
def layout(self):
# 显式面板1
self.result2 = tkinter.StringVar()
# 显式面板2
self.result1 = tkinter.StringVar()
self.result1.set('0')
label1 = tkinter.Label(self.root,textvariable = self.result2, bg = 'white', font = ('宋体', 20),anchor = 'se')
label1.place(width = 320, height = 40)
label2 = tkinter.Label(self.root, textvariable=self.result1, bg='white', font=('宋体', 20), anchor='se')
label2.place(y = 40,width=320, height=40)
# 第一行按钮
btn1 = tkinter.Button(self.root, text = '%',command = lambda : self.quyubtn())
btn1.place(x = 4, y = 84,width = 75,height = 50)
btn2 = tkinter.Button(self.root, text = '//',command = lambda : self.quzhengbtn())
btn2.place(x = 83, y = 84, width = 75, height = 50)
btn3 = tkinter.Button(self.root, text = 'ⅹ²',command = lambda : self.pingfangbtn())
btn3.place(x = 162, y = 84, width = 75, height = 50)
btn4 = tkinter.Button(self.root, text = '√',command = lambda : self.genhaobtn())
btn4.place(x = 241, y = 84, width = 75, height = 50)
# 第二行按钮
btn5 = tkinter.Button(self.root, text = 'ce',command = lambda : self.cebtn())
btn5.place(x = 4, y = 138, width = 75, height = 50)
btn6 = tkinter.Button(self.root, text = 'c',command = lambda : self.cbtn())
btn6.place(x = 83, y = 138, width = 75, height = 50)
btn7 = tkinter.Button(self.root, text = '←',command = lambda : self.houtuibtn())
btn7.place(x = 162, y = 138, width = 75, height = 50)
btn8 = tkinter.Button(self.root, text = '÷',command = lambda : self.yunsuanbtn('/'))
btn8.place(x = 241, y = 138, width = 75, height = 50)
# 第三行按钮
btn9 = tkinter.Button(self.root, text = '7',command = lambda : self.shuzibtn('7'))
btn9.place(x = 4, y = 192, width = 75, height = 50)
btn10 = tkinter.Button(self.root, text = '8',command = lambda : self.shuzibtn('8'))
btn10.place(x = 83, y = 192, width = 75, height = 50)
btn11 = tkinter.Button(self.root, text = '9',command = lambda : self.shuzibtn('9'))
btn11.place(x = 162, y = 192, width = 75, height = 50)
btn12 = tkinter.Button(self.root, text = '×',command = lambda : self.yunsuanbtn('*'))
btn12.place(x = 241, y = 192, width = 75, height = 50)
# 第四行按钮
btn9 = tkinter.Button(self.root, text = '4',command = lambda : self.shuzibtn('4'))
btn9.place(x = 4 , y = 246, width = 75, height = 50)
btn10 = tkinter.Button(self.root, text = '5',command = lambda : self.shuzibtn('5'))
btn10.place(x = 83, y = 246, width = 75, height = 50)
btn11 = tkinter.Button(self.root, text = '6',command = lambda : self.shuzibtn('6'))
btn11.place(x = 162, y = 246, width = 75, height = 50)
btn12 = tkinter.Button(self.root, text = '﹣',command = lambda : self.yunsuanbtn('-'))
btn12.place(x = 241, y = 246, width = 75, height = 50)
# 第五行按钮
btn13 = tkinter.Button(self.root, text = '1',command = lambda : self.shuzibtn('1'))
btn13.place(x = 4, y = 300, width = 75, height = 50)
btn14 = tkinter.Button(self.root, text = '2',command = lambda : self.shuzibtn('2'))
btn14.place(x = 83, y = 300, width = 75, height = 50)
btn15 = tkinter.Button(self.root, text = '3',command = lambda : self.shuzibtn('3'))
btn15.place(x = 162, y = 300, width = 75, height = 50)
btn16 = tkinter.Button(self.root, text = '﹢',command = lambda : self.yunsuanbtn('+'))
btn16.place(x = 241, y = 300, width = 75, height = 50)
# 第六行按钮
btn17 = tkinter.Button(self.root, text = '0',command = lambda : self.shuzibtn('0'))
btn17.place(x = 4, y = 354, width = 154, height = 50)
btn18 = tkinter.Button(self.root, text = '.',command = lambda : self.dianbtn('.'))
btn18.place(x = 162, y = 354, width = 75, height = 50)
btn19 = tkinter.Button(self.root, text = '=',command = lambda : self.dengyubtn())
btn19.place(x = 241, y = 354, width = 75, height = 50)
# 声明全局变量:用于保存运算数字和符号的列表
lists = []
# 添加一个用于判断是否按下运算符号的标志
yunsuansign = False
def shuzibtn(self, num):
# 判断是否按下了运算符号
if self.yunsuansign == True:
self.result1.set('0')
self.yunsuansign = False
else:
pass
# 获取面板中的原有数字
oldnum = self.result1.get()
# 判断面板初始值是否为0
if oldnum == '0':
# 为0 直接将按下的数字输入
self.result1.set(num)
#
# self.result1.set(''.join(self.lists))
else:
# 不为0 在原有基础上继续输入
self.result1.set(oldnum + num)
#
# self.result1.set(''.join(self.lists))
def yunsuanbtn(self, sign):
#获取并保存界面上的数字
self.lists.append(self.result1.get())
#保存按下的运算符号
self.lists.append(sign)
self.yunsuansign = True
def dengyubtn(self):
#判断是否按下等于号
#获取并保存当前显示器上的数字
self.lists.append(self.result1.get())
#将列表转化为字符串
newstr = ''.join(self.lists)
#使用eval执行字符串中的运算即可
jieguonum = eval(newstr)
#将结果保存到显示器
self.result2.set(newstr)
self.result1.set(jieguonum)
# 清空运算列表
self.lists.clear()
#ce
def cebtn(self):
self.lists.append(self.result1.get())
# 清除最后一个值
self.lists.pop()
self.result1.set('0')
#c
def cbtn(self):
self.lists.append(self.result1.get())
#清除所有
self.lists.clear()
self.result1.set('0')
self.result2.set('')
#<-
def houtuibtn(self):
# 后退
lenlists = len(self.result1.get())
if lenlists > 1:
result = self.result1.get()
result = result[0:lenlists - 1]
self.result1.set(result)
else:
self.result1.set('0')
#
def dianbtn(self,point):
if '.' in self.result1.get():
pass
else:
self.result1.set(self.result1.get() + point)
#%
def quyubtn(self):
tkinter.messagebox.showinfo('%', '暂不支持,请等待后续更新 . . . ')
#//
def quzhengbtn(self):
tkinter.messagebox.showinfo('//', '暂不支持,请等待后续更新 . . . ')
#ⅹ²
def pingfangbtn(self):
tkinter.messagebox.showinfo('ⅹ²', '暂不支持,请等待后续更新 . . . ')
#√
def genhaobtn(self):
tkinter.messagebox.showinfo('√', '暂不支持,请等待后续更新 . . . ')
clt = Calculator()