为了巩固tkinter学习中的frame、button和place,利用前面的方法制作了一个简单的计算器,初学,比较冗长繁琐。后续再进行改进。
import tkinter as tk
#清除计算器计算显示部分上所有的数据
def clear():
entry_left.delete(0,tk.END)
#清楚计算器右侧历史计算数据
def clear_r():
txt_right.delete(0.0,tk.END)
#退格操作
def delt():
entry = entry_left.get() #entry接收整个输入的值,此值为字符串
entry_left.delete(len(entry)-1) #len(entry)-1 每次定位到字符串的最后以为序号,从而实现退格
#点击=后的计算过程,利用eval函数实现
def equ():
entry = entry_left.get() #entry接收整个输入的值,此值为字符串
entry_left.insert(tk.END, '=')
entry_left.insert(tk.END, eval(entry))
txt_right.insert(tk.END,entry_left.get())
txt_right.insert(tk.END,'\n')
clear()
#点击显示
def click_add():
entry_left.insert(tk.END,"+")
def click_divi():
entry_left.insert(tk.END,"/")
def click_mult():
entry_left.insert(tk.END,"*")
def click_sub():
entry_left.insert(tk.END,"-")
def click_mod():
entry_left.insert(tk.END,"%")
def click_1():
entry_left.insert(tk.END,1)
def click_2():
entry_left.insert(tk.END,2)
def click_3():
entry_left.insert(tk.END,3)
def click_4():
entry_left.insert(tk.END,4)
def click_5():
entry_left.insert(tk.END,5)
def click_6():
entry_left.insert(tk.END,6)
def click_7():
entry_left.insert(tk.END,7)
def click_8():
entry_left.insert(tk.END,8)
def click_9():
entry_left.insert(tk.END,9)
def click_0():
entry_left.insert(tk.END,0)
def click_poit():
entry_left.insert(tk.END,'.')
root = tk.Tk()
root.title("这是一个简单的计算器")
root.geometry("480x240")
# 将整个界面划分为3部分
#将root分成2部分,frame_left表示计算其计算,frame_right部分显示运算的历史
frame_left = tk.Frame(root)
frame_left.place(relx=0,rely=0,relwidth=0.5,relheight=1)
frame_right = tk.Frame(root)
frame_right.place(relx=0.5,rely=0,relwidth=0.5,relheight=1)
# frame_left_top部分呈现计算器的计算部分,frame_left_button部分呈现计算器的主体部分,
frame_left_top = tk.Frame(frame_left,bg='white')
frame_left_top.place(relx=0,rely=0,relwidth=1,relheight=0.3)
frame_left_button = tk.Frame(frame_left,bg='lightblue')
frame_left_button.place(relx=0,rely=0.3,relwidth=1,relheight=0.7)
#frame_left_button部分呈现计算器的主体部分,
# 功能键
btn_clear_l = tk.Button(frame_left_button,text='C',command=clear)
btn_clear_l.place(relx=0,rely=0,relwidth=0.25,relheight=0.2)
btn_mod = tk.Button(frame_left_button,text="%",command=click_mod)
btn_mod.place(relx=0.25,rely=0,relwidth=0.25,relheight=0.2)
btn_delt = tk.Button(frame_left_button,text="<--",command=delt)
btn_delt.place(relx=0.5,rely=0,relwidth=0.25,relheight=0.2)
btn_equ = tk.Button(frame_left_button,text="=",command=equ)
btn_equ.place(relx=0.5,rely=0.8,relwidth=0.5,relheight=0.2)
#四则运算
btn_division = tk.Button(frame_left_button,text="÷",command=click_divi)
btn_division.place(relx=0.75,rely=0,relwidth=0.25,relheight=0.2)
btn_mult = tk.Button(frame_left_button,text="x",command=click_mult)
btn_mult.place(relx=0.75,rely=0.2,relwidth=0.25,relheight=0.2)
btn_add = tk.Button(frame_left_button,text="+",command=click_add)
btn_add.place(relx=0.75,rely=0.4,relwidth=0.25,relheight=0.2)
btn_sub = tk.Button(frame_left_button,text="-",command=click_sub)
btn_sub.place(relx=0.75,rely=0.6,relwidth=0.25,relheight=0.2)
#数字键
btn_7 = tk.Button(frame_left_button,text="7",command=click_7)
btn_7.place(relx=0,rely=0.2,relwidth=0.25,relheight=0.2)
btn_8 = tk.Button(frame_left_button,text="8",command=click_8)
btn_8.place(relx=0.25,rely=0.2,relwidth=0.25,relheight=0.2)
btn_9 = tk.Button(frame_left_button,text="9",command=click_9)
btn_9.place(relx=0.5,rely=0.2,relwidth=0.25,relheight=0.2)
btn_4 = tk.Button(frame_left_button,text="4",command=click_4)
btn_4.place(relx=0,rely=0.4,relwidth=0.25,relheight=0.2)
btn_5 = tk.Button(frame_left_button,text="5",command=click_5)
btn_5.place(relx=0.25,rely=0.4,relwidth=0.25,relheight=0.2)
btn_6 = tk.Button(frame_left_button,text="6",command=click_6)
btn_6.place(relx=0.5,rely=0.4,relwidth=0.25,relheight=0.2)
btn_1 = tk.Button(frame_left_button,text="1",command=click_1)
btn_1.place(relx=0,rely=0.6,relwidth=0.25,relheight=0.2)
btn_2 = tk.Button(frame_left_button,text="2",command=click_2)
btn_2.place(relx=0.25,rely=0.6,relwidth=0.25,relheight=0.2)
btn_3 = tk.Button(frame_left_button,text="3",command=click_3)
btn_3.place(relx=0.5,rely=0.6,relwidth=0.25,relheight=0.2)
btn_0 = tk.Button(frame_left_button,text="0",command=click_0)
btn_0.place(relx=0,rely=0.8,relwidth=0.25,relheight=0.2)
btn_poit = tk.Button(frame_left_button,text=".",command=click_poit)
btn_poit.place(relx=0.25,rely=0.8,relwidth=0.25,relheight=0.2)
#frame_left_top 部分显示当前操作的内容
entry_left = tk.Entry(frame_left_top,bg='lightgray')
entry_left.place(relx=0,rely=0,relwidth=1,relheight=1)
#frame_right部分显示运算的历史
txt_right = tk.Text(frame_right,bg='lightblue')
txt_right.place(relx=0,rely=0,relwidth=1,relheight=1)
btn_clear_r = tk.Button(frame_right,text='清除',bg='gray',command=clear_r)
btn_clear_r.place(relx=0.4,rely=0.85,relwidth=0.2,relheight=0.15)
root.mainloop()