Python制作简易计算器,附源代码与注释!

工具:python 3.6       pycharm编辑器

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

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!??¤
QQ群:961562169

  •   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张图片

 

你可能感兴趣的:(python,编程语言,tkinter)