博主前段时间学习Tkinter模块想制作一个简单的计算器,贴代码如下:
__author__='PythonStriker'
from tkinter import *
from math import *
# 计算器主窗体
root = Tk()
root.config(bg='#333')
root.geometry('250x380+600+220')
root.title('一个普通计算器 version_2.1')
root.resizable(width=False, height=False)
frame_show = Frame(width=300, height=150, bg='#333')
# 主窗体顶部区域
v = StringVar()
v.set('0')
show_label = Label(frame_show, textvariable=v, bg='#222', width=13, height=1,fg = '#fff' ,font=("黑体", 20, "bold"), justify=LEFT,anchor='e')
show_label.pack(padx=10, pady=10)
frame_show.pack()
# 是否按下了运算符
isopear = False
# 控制弹窗个数
newWindowNumber = 0
# 操作数中小数点个数
pointnumber = 0
# 统计输入运算符个数
opearnumber = 0
# 操作序列
calc = []
# 区分计算与按键计算flag
equal_flag = False
def change(num):
global equal_flag
global isopear
global pointnumber
if isopear == False:
if v.get() == '0' and num != '.':
v.set('')
v.set(num)
elif v.get() == '0' and num == '.':
v.set('0.')
pointnumber = 1
else:
if num == '.' and pointnumber == 1:
pass
elif num == '.' and pointnumber == 0:
v.set(v.get() + num)
pointnumber = 1
else:
if equal_flag:
v.set(num)
equal_flag = False
else:
v.set(v.get() + num)
else:
if num == '.':
v.set('0.')
pointnumber = 1
elif v.get() == '-':
v.set(v.get() + num)
else:
v.set(num)
isopear = False
# 运算
def operation(sign):
global isopear
global calc
global pointnumber
global opearnumber
if isopear == False and opearnumber == 0:
calc.append(v.get())
if sign == '+':
calc.append('+')
elif sign == '-':
calc.append('-')
elif sign == '*':
calc.append('*')
elif sign == '/':
calc.append('/')
elif sign == '%':
calc.append('%')
else:
# 加上符号的情况
if sign == '+':
equal('+')
elif sign == '-':
equal('-')
elif sign == '*':
equal('*')
elif sign == '/':
equal('/')
elif sign == '%':
equal('%')
opearnumber = opearnumber + 1
isopear = True
pointnumber = 0
def equal(sign):
global calc
# 获取当前界面的数值准备运算
calc.append(v.get())
# 组成运算字符串
calcstr = ''.join('%s' % id