工具:python 3.6 pycharm编辑器
先简单介绍一下使用的Tkinter图形库:
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!??¤
QQ群:961562169
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()
六.最后附上我的效果图