完美复刻
from tkinter import *
def add():
a = eval(num_a.get())
b = eval(num_b.get())
result.set(a+b)
def minus():
a = eval(num_a.get())
b = eval(num_b.get())
result.set(a-b)
def mul():
a = eval(num_a.get())
b = eval(num_b.get())
result.set(a*b)
def dev():
a = eval(num_a.get())
b = eval(num_b.get())
result.set(a/b)
def delete():
num_a.set('')
num_b.set('')
result.set('')
root = Tk()
root.title('简易计算器')
root.geometry=('300x200')
root.resizable(0,0)
Label(root, text='First Number:').grid(row=0,columnspan=3)
num_a = StringVar()
Entry(root, width=30,textvariable=num_a).grid(row=1,column=1)
btn_add = Button(root,text='+',width=2,command=add).grid(row=1,column=4)
Label(root,text='Second Number:').grid(row=2,columnspan=3)
btn_minus = Button(root,text='-',width=2,command=minus).grid(row=2,column=4)
num_b = StringVar()
Entry(root, width=30,textvariable=num_b).grid(row=3,column=1)
btn_mul = Button(root,text='*',width=2,command=mul).grid(row=3,column=4)
Label(root,text='Result:').grid(row=4,columnspan=3)
btn_dev = Button(root,text='/',width=2,command=dev).grid(row=4,column=4)
result = StringVar()
Entry(root,width=30,textvariable=result).grid(row=5,column=1)
btn_del = Button(root,text='del',command=delete).grid(row=5,column=4)
root.mainloop()
可以参考
import tkinter as tk
def create_btn(text,col,row,cs,rs,px=(1,1),py=(1,1)): #函数生成按钮
t=text
t=t.replace('×','*')
t=t.replace('÷','/')
t=t.replace('x²','**2')
t=t.replace('1/x','**(-1)')
a=tk.Button(root,text=text,width=4,command=lambda:(text_print(t)))
a.grid(column=col,row=row,columnspan=cs,rowspan=rs,padx=px,pady=py,sticky='nswe')
return(a)
def grid_rowconfigure(*rows): #函数填充行
for i in rows:
root.grid_rowconfigure(i,weight=1)
def grid_columnconfigure(*cols): #函数填充列
for i in cols:
root.grid_columnconfigure(i,weight=1)
def bind_print(event): #函数键盘事件输入算式
global textchange,equal_is
if event.keysym!='Return':
if event.keysym=='BackSpace':
a=str(textchange)[0:-1]
textchange=a
elif event.keysym=='Delete':
textchange=''
else:
textchange=str(textchange)+str(event.char)
la.configure(text=textchange)
show_is()
equal_is=False
else:
text_equal()
def text_print(x): #函数按钮输入算式
global textchange,equal_is
if x!='=':
if x=='←':
a=str(textchange)[0:-1]
textchange=a
elif x=='C':
textchange=''
else:
textchange=str(textchange)+str(x)
la.configure(text=textchange)
show_is()
equal_is=False
if x=='=':
text_equal()
def text_equal(event=None): #函数计算结果并上到输入框
global textchange,equal_is
if lab['text']!='错误' and equal_is==False:
textchange=lab['text']
la.configure(text=textchange)
lab.configure(text='')
equal_is=True
def show_is(): #显示框内容
global textchange
if textchange!='':
try:
textshow=eval(textchange)
except (SyntaxError,TypeError,NameError):
lab.configure(text='错误')
else:
lab.configure(text=textshow)
else:
lab.configure(text='')
root=tk.Tk() #创建窗体
root.geometry('250x350')
root.title('计算器')
root.bind('<Key>',bind_print)
equal_is=False #一些变量
textchange=''
la=tk.Label(root,text='',bg='white',fg='black',font=('宋体',24),anchor='w',relief='flat') #生成输入框
la.grid(column=0,row=0,columnspan=5,rowspan=1,sticky='we')
lab=tk.Label(root,bg='white',fg='grey',height=1,font=('宋体',22),anchor='w',relief='flat') #生成显示框
lab.grid(column=0,row=1,columnspan=5,rowspan=1,sticky='we')
btn={} #生成按钮
btn['1']=create_btn('1',0,5,1,1)
btn['2']=create_btn('2',1,5,1,1)
btn['3']=create_btn('3',2,5,1,1)
btn['4']=create_btn('4',0,4,1,1)
btn['5']=create_btn('5',1,4,1,1)
btn['6']=create_btn('6',2,4,1,1)
btn['7']=create_btn('7',0,3,1,1)
btn['8']=create_btn('8',1,3,1,1)
btn['9']=create_btn('9',2,3,1,1)
btn['0']=create_btn('0',0,6,2,1)
btn['.']=create_btn('.',2,6,1,1)
btn['=']=create_btn('=',4,5,1,2)
btn['+']=create_btn('+',3,6,1,1)
btn['-']=create_btn('-',3,5,1,1)
btn['*']=create_btn('×',3,4,1,1)
btn['/']=create_btn('÷',4,4,1,1)
btn['←']=create_btn('←',1,2,1,1)
btn['C']=create_btn('C',2,2,1,1)
btn['(']=create_btn('(',3,2,1,1)
btn[')']=create_btn(')',4,2,1,1)
btn['**2']=create_btn('x²',3,3,1,1)
btn['**(-1)']=create_btn('1/x',4,3,1,1)
grid_rowconfigure(2,3,4,5,6)
grid_columnconfigure(0,1,2,3,4)
root.mainloop()
#!/usr/bin/python3
# encoding:utf-8
import tkinter as tk
root = tk.Tk()
root.title("Small Calculator")
root.geometry('500x300')
var1 = tk.DoubleVar()
label1 = tk.Label(text="The First Number", width=20, height=2)
label1.pack()
entry1 = tk.Entry(width=20)
entry1.pack()
var2 = tk.StringVar()
label2 = tk.Label(text="The Operator", width=20, height=2)
label2.pack()
entry2 = tk.Entry(width=20)
entry2.pack()
var3 = tk.DoubleVar()
label3 = tk.Label(text="The Second Number", width=20, height=2)
label3.pack()
entry3 = tk.Entry(width=20)
entry3.pack()
var4 = tk.DoubleVar()
label4 = tk.Label(text="The Solution", width=20, height=2)
label4.pack()
label5 = tk.Label(textvar=var4, width=30, height=1,)
label5.pack()
def clickFun():
global var1
global var2
global var3
global var4
va11 = int(entry1.get())
var2 = entry2.get()
var3 = int(entry3.get())
if var2 == '+':
var4.set(int(va11+var3))
elif var2 == '-':
var4.set(int(va11-var3))
elif var2 == '*':
var4.set(int(va11*var3))
elif var2 == '/':
if var3 == 0:
var4.set("请重新输入数据")
else:
var4.set(int(va11/var3))
else:
var4.set("运算符出错,请重新输入数据")
button1 = tk.Button(text="Deal" ,width=10, height=2, command=clickFun)
button1.pack()
root.mainloop()
root = tk.Tk()
root.title("Small Calculator")
root.geometry('500x300')
var1 = tk.DoubleVar()
label1 = tk.Label(text="The First Number", width=20, height=2)
label1.pack()
entry1 = tk.Entry(width=20)
entry1.pack()
var2 = tk.StringVar()
label2 = tk.Label(text="The Operator", width=20, height=2)
label2.pack()
entry2 = tk.Entry(width=20)
entry2.pack()
var3 = tk.DoubleVar()
label3 = tk.Label(text="The Second Number", width=20, height=2)
label3.pack()
entry3 = tk.Entry(width=20)
entry3.pack()
var4 = tk.DoubleVar()
label4 = tk.Label(text="The Solution", width=20, height=2)
label4.pack()
label5 = tk.Label(textvar=var4, width=30, height=1,)
label5.pack()
def clickFun():
global var1
global var2
global var3
global var4
va11 = int(entry1.get())
var2 = entry2.get()
var3 = int(entry3.get())
if var2 == '+':
var4.set(int(va11+var3))
elif var2 == '-':
var4.set(int(va11-var3))
elif var2 == '*':
var4.set(int(va11*var3))
elif var2 == '/':
if var3 == 0:
var4.set("请重新输入数据")
else:
var4.set(int(va11/var3))
else:
var4.set("运算符出错,请重新输入数据")
button1 = tk.Button(text="Deal" ,width=10, height=2, command=clickFun)
button1.pack()
root.mainloop()