zoukankan      html  css  js  c++  java
  • 利用Python代码编写计算器小程序

      1 import tkinter
      2 import tkinter.messagebox
      3 import math
      4 class JSQ:
      5 
      6 
      7     def __init__(self):
      8         #创建主界面
      9         self.root = tkinter.Tk()
     10         self.root.minsize(270, 330)
     11         self.root.maxsize(270, 330)
     12         self.root.title('小可乐的计算器')
     13         #定义一个变量赋值给页面label
     14         self.result = tkinter.StringVar()
     15         #界面先显示个0
     16         self.result.set(0)
     17         # 设置一个全局变量  运算数字和符号的列表
     18         self.lists = []
     19         # 添加一个判断是否按下运算符号的标志
     20         self.isPressSign = False
     21         # 添加一个判断是否运算完毕的标志,如果运算完毕在获取数字的方法中会清空上一轮运算结果
     22         self.islistsclear = False
     23         # 添加一个判断百分号是否使用的功能
     24         self.isbaifenhao = False
     25         # 为了下面的百分号方法使用(在百分号中为按下运算符号之后的数字)
     26         self.num1 = ''
     27         # 定义一个全局变量(获取百分好的结果)为了在‘=’运算的时候输出
     28         self.result3 = None
     29         # 获取运算符号之前的数字
     30         self.num = ''
     31         # 获取运算符号给百分好方法使用
     32         self.sign1 = ''
     33         self.layout()
     34         self.menubar()
     35         #将窗口一直显示
     36         self.root.mainloop()
     37 
     38     def menubar(self):
     39         # 创建总菜单
     40         allmenu = tkinter.Menu(self.root)
     41         # 创建子菜单
     42         filemenu = tkinter.Menu(allmenu, tearoff=0)
     43         # 在子菜单里添加文件
     44         filemenu.add_command(label='标准型(T)    Alt+1',command = lambda : self.func2())
     45         filemenu.add_command(label='科学性(S)    Alt+2',command = lambda : self.func2())
     46         filemenu.add_command(label='程序员(p)    Alt+3',command = lambda : self.func2())
     47         filemenu.add_command(label='统计信息(A)   Alt+4',command = lambda : self.func2())
     48         # 创建分割线
     49         filemenu.add_separator()
     50         filemenu.add_command(label='历史记录(Y)   Ctrl+H',command = lambda : self.func2())
     51         filemenu.add_command(label='数学分组(I)',command = lambda : self.func2())
     52         filemenu.add_separator()
     53         filemenu.add_command(label='基本(B)    Ctrl+F4',command = lambda : self.func2())
     54         filemenu.add_command(label='单位转换(U)   Ctrl+U',command = lambda : self.func2())
     55         filemenu.add_command(label='日期计算(D)   Ctrl+E',command = lambda : self.func2())
     56         # 在子菜单里再创建一个菜单
     57         filemenunei = tkinter.Menu(filemenu, tearoff=0)
     58         # 在子菜单里的菜单添加文件
     59         filemenunei.add_command(label='抵押(M)',command = lambda : self.func2())
     60         filemenunei.add_command(label='汽车租赁(V)',command = lambda : self.func2())
     61         filemenunei.add_command(label='油耗(mpg)(F)',command = lambda : self.func2())
     62         filemenunei.add_command(label='油耗(1/100km)(U)',command = lambda : self.func2())
     63         # 将子菜单里的菜单添加到子菜单里
     64         filemenu.add_cascade(label='工作表(W)', menu=filemenunei)
     65         # 添加退出功能
     66         filemenu.add_command(label='退出', command=self.root.quit)
     67         # 将子菜单添加到总菜单里
     68         allmenu.add_cascade(label='查看(V)', menu=filemenu)
     69         # 再创建一个子菜单
     70         editmenu = tkinter.Menu(allmenu, tearoff=0)
     71         # 在子菜单里添加文件
     72         editmenu.add_command(label='复制(C)',command = lambda : self.func2())
     73         editmenu.add_command(label='粘贴(P)',command = lambda : self.func2())
     74         # 创建分割线
     75         editmenu.add_separator()
     76         # 在子菜单里创建一个菜单
     77         editmenunei = tkinter.Menu(editmenu, tearoff=0)
     78         # 在子菜单里的菜单添加文件
     79         editmenunei.add_command(label='复制历史记录(I)', stat='disable')
     80         editmenunei.add_command(label='编辑(E)    F2', stat='disable')
     81         editmenunei.add_command(label='取消编辑(N)    Esc', stat='disable')
     82         editmenunei.add_command(label='清除(L)    Ctrl+Shift+D', stat='disable')
     83         # 将子菜单里的菜单添加到子菜单
     84         editmenu.add_cascade(label='历史记录(H)', menu=editmenunei)
     85         # 将子菜单添加到总菜单
     86         allmenu.add_cascade(label='编辑(E)', menu=editmenu)
     87         # 创建第三个子菜单
     88         helpmenu = tkinter.Menu(allmenu, tearoff=0)
     89         # 在第三个子菜单里添加文件
     90         helpmenu.add_command(label='查看帮助(v)    F1',command = lambda : self.func2())
     91         # 创建分割线
     92         helpmenu.add_separator()
     93         helpmenu.add_command(label='关于计算器(A)',command = lambda : self.func2())
     94         # 将第三个子菜单添加到总菜单中
     95         allmenu.add_cascade(label='帮助(H)', menu=helpmenu)
     96         # 将总菜单布局到主窗口
     97         self.root.config(menu=allmenu)
     98 
     99     # 下面代码用于页面布局
    100     def layout(self):
    101         #显示结果的标签
    102         label = tkinter.Label(self.root, textvariable=self.result, bg='white', font=('黑体', 10), anchor='e')
    103         label.place(x=20, y=10, width=230, height=30)
    104 
    105         btnmc = tkinter.Button(self.root, text='MC',command = lambda : self.func2())
    106         btnmc.place(x=20, y=50, width=30, height=30)
    107 
    108         btnmr = tkinter.Button(self.root, text='MR',command = lambda : self.func2())
    109         btnmr.place(x=70, y=50, width=30, height=30)
    110 
    111         btnms = tkinter.Button(self.root, text='MS',command = lambda : self.func2())
    112         btnms.place(x=120, y=50, width=30, height=30)
    113 
    114         btnmjia = tkinter.Button(self.root, text='M+',command = lambda : self.func2())
    115         btnmjia.place(x=170, y=50, width=30, height=30)
    116 
    117         btnmjian = tkinter.Button(self.root, text='M-',command = lambda : self.func2())
    118         btnmjian.place(x=220, y=50, width=30, height=30)
    119 
    120         btnjiantou = tkinter.Button(self.root, text='', command=lambda: self.jiantou())
    121         btnjiantou.place(x=20, y=90, width=30, height=30)
    122 
    123         btnce = tkinter.Button(self.root, text='CE', command=lambda: self.CE())
    124         btnce.place(x=70, y=90, width=30, height=30)
    125 
    126         btnc = tkinter.Button(self.root, text='C', command=lambda: self.clears())
    127         btnc.place(x=120, y=90, width=30, height=30)
    128 
    129         btnzhengfu = tkinter.Button(self.root, text='±', command=lambda: self.zhenffu())
    130         btnzhengfu.place(x=170, y=90, width=30, height=30)
    131 
    132         btnkaigen = tkinter.Button(self.root, text='', command=lambda: self.sqrts())
    133         btnkaigen.place(x=220, y=90, width=30, height=30)
    134 
    135         btn7 = tkinter.Button(self.root, text='7', command=lambda: self.pressNum('7'))
    136         btn7.place(x=20, y=130, width=30, height=30)
    137 
    138         btn8 = tkinter.Button(self.root, text='8', command=lambda: self.pressNum('8'))
    139         btn8.place(x=70, y=130, width=30, height=30)
    140 
    141         btn9 = tkinter.Button(self.root, text='9', command=lambda: self.pressNum('9'))
    142         btn9.place(x=120, y=130, width=30, height=30)
    143 
    144         btnchu = tkinter.Button(self.root, text='/', command=lambda: self.pressCompute('/'))
    145         btnchu.place(x=170, y=130, width=30, height=30)
    146 
    147         btnbaifen = tkinter.Button(self.root, text='%', command=lambda: self.baifenhao())
    148         btnbaifen.place(x=220, y=130, width=30, height=30)
    149 
    150         btn4 = tkinter.Button(self.root, text='4', command=lambda: self.pressNum('4'))
    151         btn4.place(x=20, y=170, width=30, height=30)
    152 
    153         btn5 = tkinter.Button(self.root, text='5', command=lambda: self.pressNum('5'))
    154         btn5.place(x=70, y=170, width=30, height=30)
    155 
    156         btn6 = tkinter.Button(self.root, text='6', command=lambda: self.pressNum('6'))
    157         btn6.place(x=120, y=170, width=30, height=30)
    158 
    159         btncheng = tkinter.Button(self.root, text='*', command=lambda: self.pressCompute('*'))
    160         btncheng.place(x=170, y=170, width=30, height=30)
    161 
    162         btnfenshu = tkinter.Button(self.root, text='1/X', command=lambda: self.fenshu())
    163         btnfenshu.place(x=220, y=170, width=30, height=30)
    164 
    165         btn1 = tkinter.Button(self.root, text='1', command=lambda: self.pressNum('1'))
    166         btn1.place(x=20, y=210, width=30, height=30)
    167 
    168         btn2 = tkinter.Button(self.root, text='2', command=lambda: self.pressNum('2'))
    169         btn2.place(x=70, y=210, width=30, height=30)
    170 
    171         btn3 = tkinter.Button(self.root, text='3', command=lambda: self.pressNum('3'))
    172         btn3.place(x=120, y=210, width=30, height=30)
    173 
    174         btnjian = tkinter.Button(self.root, text='-', command=lambda: self.pressCompute('-'))
    175         btnjian.place(x=170, y=210, width=30, height=30)
    176 
    177         btndenghao = tkinter.Button(self.root, text='=', command=lambda: self.pressEqual())
    178         btndenghao.place(x=220, y=210, width=30, height=70)
    179 
    180         btn0 = tkinter.Button(self.root, text='0', command=lambda: self.pressNum('0'))
    181         btn0.place(x=20, y=250, width=80, height=30)
    182 
    183         btndian = tkinter.Button(self.root, text='.', command=lambda: self.pressNum('.'))
    184         btndian.place(x=120, y=250, width=30, height=30)
    185 
    186         btnjia = tkinter.Button(self.root, text='+', command=lambda: self.pressCompute('+'))
    187         btnjia.place(x=170, y=250, width=30, height=30)
    188 
    189     # 数字函数(获取数字的函数)
    190     def pressNum(self,num):
    191         # 下面的百分好会用到
    192         self.num1 = num
    193         # 判断是否按下运算符号
    194         if self.isPressSign == False:
    195             pass
    196         #如果按下运算符号界面归0
    197         else:
    198             self.result.set(0)
    199             self.isPressSign = False
    200         # 判断运算是否完毕
    201         if self.islistsclear == False:
    202             # 获取面板上原有的数字
    203             oldNum = self.result.get()
    204             # 判断原有数字是否为零
    205             if oldNum == '0':
    206                 #将传入的数字显示
    207                 self.result.set(num)
    208             else:
    209                 #原来的数字加上现在输入的数字
    210                 newNum = oldNum + num
    211                 self.result.set(newNum)
    212         # 运算完毕界面自动清空
    213         else:
    214             # lists.clear()#如果添加这行代码就不能在上一轮运算结果的基础上运算了
    215             self.result.set('0')
    216             self.islistsclear = False
    217             self.result.set(num)
    218 
    219     # 运算操作(获取运算符号然后将数字和符号添加到列表中)
    220     def pressCompute(self,sign):
    221         # 获取界面上的数字
    222         if True:
    223             #获取输入运算符之前的数字
    224             self.num = self.result.get()
    225             #将数字加入列表之中
    226             self.lists.append(self.num)
    227             #将运算符加入到列表之中
    228             self.lists.append(sign)
    229             #将运算符赋值给sign1(下面的百分号方法会用到)
    230             self.sign1 = sign
    231             #将是否按下运算符号标志改成True
    232             self.isPressSign = True
    233         # 在刚开始的时候添加一个负号(-)用于正负好转换使用
    234         #如果列表第一位为0
    235         if self.lists[0] == '0':
    236             #如果列表第二位为‘-’
    237             if self.lists[1] == '-':
    238                 self.result.set('-')
    239                 # 设置运算符号的状态
    240                 self.isPressSign = False
    241 
    242     # 获取运算结果(将列表内的值转换为字符串,然后将字符串用python代码执行)
    243     def pressEqual(self):
    244         # 获取当前页面的数字
    245         curnum = self.result.get()
    246         self.lists.append(curnum)
    247         #将列表中的数据转换为字符串
    248         computeStr = ''.join(self.lists)
    249         #将字符串用python代码执行
    250         endNum = eval(computeStr)
    251         #界面显示结果
    252         self.result.set(endNum)
    253         #如果百分号标志触发
    254         if self.isbaifenhao == True:
    255             #界面显示self.result3
    256             self.result.set(self.result3)
    257         #运算结束后将列表清空
    258         self.lists.clear()
    259         #将运算标志改成True
    260         self.islistsclear = True
    261 
    262     # 清空运算
    263     def clears(self):
    264         self.lists.clear()
    265         self.result.set('0')
    266 
    267     # 删除上一位数字
    268     def CE(self):
    269         self.result.set('0')
    270 
    271     # 用于更改数的正负值
    272     def zhenffu(self):
    273         self.result1 = self.result.get()
    274         self.result.set(float(self.result1) * (-1))
    275         self.islistsclear = True
    276 
    277     # 用于开平方运算
    278     def sqrts(self):
    279         result1 = self.result.get()
    280         self.result.set(math.sqrt(float(result1)))
    281         self.lists.clear()
    282         self.islistsclear = True
    283 
    284     # 用于求x/9的值
    285     def fenshu(self):
    286         result1 = self.result.get()
    287         self.result.set(1 / float(result1))
    288         self.islistsclear = True
    289 
    290     #用于求百分号功能的方法
    291     def baifenhao(self):
    292         listss = []
    293         # 判断如果输入一个数没输运算符号的话界面自动归零
    294         if len(self.lists) < 1:
    295             self.result.set(0)
    296         else:
    297             #获取输入运算符号之前的数字
    298             a1 = float(self.num)
    299             #获取运算符号
    300             a2 = self.sign1
    301 
    302             #再次获取输入运算符号之前的数字
    303             a3 = float(self.num)
    304 
    305             a4 = '*'
    306             #算出最后一个数字的百分数
    307             a6 = float(self.num1) / 100
    308 
    309             #算出百分号的那个结果
    310             resultmuqian = a3 * a6
    311             #总结果
    312             resultbai = str(a1) + a2 + str(a3) + a4 + str(a6)
    313             #将字符串用python代码执行
    314             self.result3 = eval(resultbai)
    315             #在界面上按下%符号是显示的结果
    316             self.result.set(resultmuqian)
    317             #改变百分号的标志
    318             self.isbaifenhao = True
    319 
    320     #箭头的意义删除后一位数字
    321     def jiantou(self):
    322         result1 = self.result.get()
    323         result1 = list(result1)
    324         del result1[-1]
    325         result1 = str(result1)
    326         self.result.set(result1)
    327 
    328     def func2(self):
    329         tkinter.messagebox.askokcancel(title = '略过',message='没实现')
    330 
    331 
    332 myjsq = JSQ()

    好了,以上便是利用Python代码实现一个计算器小程序的过程。
  • 相关阅读:
    【总结】编写自己的JDBC框架
    笔者带你剖析淘宝TDDL(TAOBAO DISTRIBUTE DATA LAYER)
    高性能jdbc封装工具 Apache Commons DbUtils 1.6(转载)
    简单通用JDBC辅助类封装
    word2010中怎样快速修改同级标题格式
    怎么批量修改Word表格的宽度
    MS WORD 表格自动调整列宽,自动变漂亮,根据内容自动调整 .
    PowerDesiger 15逆向生成工程E-R图及导出word表格
    PowerDesigner-自定义生成WORD
    PowerDesigner如何自定义报表模板
  • 原文地址:https://www.cnblogs.com/kelelaoshi/p/8018160.html
Copyright © 2011-2022 走看看