用python编译简易计算器

工具:python 3.6       pycharm编辑器

先简单介绍一下使用的Tkinter图形库:

  •   Tk是Python默认的工具集(即图形库),Tkinter是Tk的Python接口,通过Tkinter可以方便地调用Tk进行图形界面开发。
  •   Tk与其他开发库相比,不是最强大的,模块工具也不是非常的丰富。但它非常简单,所提供的功能开发一般的应用也完全够用了,且能在大部分平台上运行。
  •   Python自带的IDEL也是用Tkinter开发的。
  •   Tkinter的不足之处是缺少合适的可视化界面设计工具,需要通过代码来完成窗口设计和元素布局。
  •   Tkinter中提供了较为丰富的控件,完全能满足基本的GUI程序的需求。
  •   由于Tkinter模块已经在Python中内置,所以在使用之前,只需将其导入即可。
  •   两种导入方式为:

       1.import tkinter as tk导入tkinter,但没引入任何组件,在使用时需要使用tk前缀,如需要引入按钮,则表示为:tk.Button

          2.from tkinter import* 将tkinter中的所有组件一次性引入。

好了,看代码吧

一. 导入Tkinter模块,并创建一个顶层窗口

import math
from tkinter import *
root=Tk()
root.title("计算器")
'''
root.geometry("430x180")
root.resizable(width=False, height=False) #可用于固定窗口大小   '''

二. 定义鼠标事件(这里是为了美化计算器啦,也可以不要)

def come(event):   #当鼠标光圈进入小部件时,部件背景颜色变为橙色
  event.widget["background"]= "orange"
def go(event):     #当鼠标光圈离开小部件时,部件背景颜色恢复
  event.widget["background"] = "#%02x%02x%02x" % (240,240,240)#实现RGB和十六进制的换算
三.定义输入数字与符号函数
reset=True
def bprint(event):
    global label
    global reset
    s=label['text']
    num=event.widget['text']
    if num in ['C','MC','MR','MS']:
      label['text']="0"
      return
    if num in "=":   ##计算表达式
      if s[-1]=="√":
        label['text']=math.sqrt(eval(s[:-1]))
        return
      if s[-1]=="%":
        label['text']=eval(s[:-1])*0.01
        s=str(eval(s[:-1])*0.01)
        return
      if s[-1]=="x":
        label['text']=1/eval(s[:-3])
        s=str(1/eval(s[:-3]))
        return
      else:
        label['text']=eval(label['text'])  ###eval函数可以计算Python表达式,并返回结果
        reset=True
        return
      
    if num in "Backspace":         ####退格
      label['text']=s[:-1]
      return
    if s=='0' or reset==True:
        s=""
        reset=False
    label['text']=s+num

四. 定义标准计算器按键框

def standard():
  show=["MC","MR","MS","M+","M-","Backspace","CE","C","-","√",'7','8','9',"/","%",'4','5','6',"*","1/x",'1','2','3',"-","="]
  for i in range(5):
    for j in range(5):
      t=Button(root,text =show[5*i+j],width =10,height=1)
      t.grid(row=i+2,column =j,sticky =W,padx =1,pady=1)
      t.bind("",come)
      t.bind("",go)
      t.bind("",bprint)
  
  equal = Button(root,text="=",width =10,height =3)
  equal.grid(row=6,column =4,sticky =W,padx =1,pady=1,rowspan =2)
  equal.bind("",come)
  equal.bind("",go)
  equal.bind("",bprint)
     
  btn0 = Button(root,text ='0',width =22,height =1)
  btn0.grid(row=7,column =0,sticky =W,padx =1,pady=1,columnspan =2)   #让一个部件占用多个行或列。columnspan指定列数,rowspan指定行数。
  btn0.bind("",come)
  btn0.bind("",go)
  btn0.bind("",bprint)
  dot = Button(root,text =".",width =10,height =1)
  dot.grid(row=7,column =2,sticky =W,padx =1,pady=1)
  dot.bind("",come)
  dot.bind("",go)
  dot.bind("",bprint)
  add = Button(root,text ="+",width =10)
  add.grid(row=7,column =3,sticky =W,padx =1,pady=1)
  add.bind("",come)
  add.bind("",go)
  add.bind("",bprint)

五. 接下来是主函数

if __name__ == "__main__":
    
    #########################################菜单设计
    menubar = Menu(root)

    #创建下拉菜单查看
    view_menu = Menu(menubar,tearoff = 0)  #tearoff = 0表示菜单不能移除窗口,add_cascade添加菜单标签,add_command添加条目到菜单。
    v_mode = IntVar()
    view_menu.add_radiobutton(label = "标准型",command=standard,variable = v_mode,value = 0)
    view_menu.add_radiobutton(label = "科学型",variable = v_mode,value = 1)
    view_menu.add_radiobutton(label = "程序员型",variable =v_mode,value = 2)
    view_menu.add_radiobutton(label = "统计型",variable = v_mode,value = 3)
    view_menu.add_separator()
    h_mode = IntVar()
    view_menu.add_radiobutton(label = "历史记录",variable = h_mode,value = 0)
    view_menu.add_radiobutton(label = "数字分组",variable = h_mode,value = 1)
    menubar.add_cascade(label = "查看(V)",menu = view_menu)

    #创建下拉菜单编辑 
    edit = Menu(menubar,tearoff = 0)
    edit.add_command(label = "复制")
    edit.add_command(label = "黏贴")
    menubar.add_cascade(label = "编辑(E)",menu = edit)

    #创建下拉菜单帮助
    helpm = Menu(menubar,tearoff=0)
    helpm.add_command(label = "查看帮助")
    helpm.add_command(label = "关于计算器")
    menubar.add_cascade(label = "帮助(H)",menu= helpm)

    #显示菜单
    root.config(menu = menubar)

    #####################################计算器显示框
    label=Label(root,text="0",background="white",height=2,width=58,anchor="e")
    label.grid(row=1,columnspan=6,sticky=W)

    ################################显示标准形式
    standard()
    root.mainloop()

六.最后附上我的效果图

用python编译简易计算器_第1张图片

ps:因为功能并不很全,为避免运行后有的小伙伴疑惑,下面简要说明一下bug,有大神能解答欢迎指教(^_^)

bug说明:

1.第一排键我也不知道是干嘛的,所以都变成了清零

2.菜单栏还都只是摆设

3.可以连续加减乘除,但不能再结果上继续计算,需要先清零

你可能感兴趣的:(python,计算器,python,Tkinter)