第一个项目-计算器

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值