简易计算器实现(python)
from tkinter import *
root= Tk( )
root. title( '简易计算器' )
formula= StringVar( )
formula. set ( '0' )
entry= Entry( root, textvariable= formula, bg= 'skyblue' ) . pack( side= TOP)
def CE ( f) : 定义'CE' 运算符每次删除一个完整数字
s= f. get( )
sign= [ '/' , '*' , '-' , '+' ]
for i in range ( 1 , len ( s) + 1 ) :
if s[ - i] in sign:
s= list ( s)
if i != 1 :
s[ - i+ 1 : ] = ''
f. set ( '' . join( s) )
else :
f. set ( '' . join( s) )
return
def XFS ( f, k) :
s= f. get( )
sign= [ '+' , '-' , '*' , '/' ]
for i in range ( 1 , len ( s) + 1 ) :
if s[ - i] == '+' :
s= list ( s)
s[ - i] = '-'
f. set ( '' . join( s) )
return
if s[ - i] == '-' :
s= list ( s)
s[ - i] = '+'
f. set ( '' . join( s) )
if s[ 0 ] == '+' :
s[ 0 ] = ''
f. set ( '' . join( s) )
return
if s[ - i] == '/' or s[ - i] == '*' :
s= list ( s)
s. insert( - i+ 1 , '-' )
f. set ( '' . join( s) )
return
s= list ( s)
s. insert( 0 , '-' )
f. set ( '' . join( s) )
def add ( f, k) :
s= f. get( )
sign= [ '+' , '-' , '*' , '/' ]
digit= [ '%d' % i for i in range ( 10 ) ]
if k in digit:
if s == '0' :
f. set ( k)
elif len ( s) >= 2 :
if s[ - 1 ] == '/' and k == '0' :
f. set ( s)
elif ( s[ - 2 ] in sign) and s[ - 1 ] == '0' :
f. set ( s[ : - 1 ] + k)
else :
f. set ( f. get( ) + k)
else :
f. set ( f. get( ) + k)
else :
if s[ - 1 ] not in sign:
f. set ( f. get( ) + k)
elif s[ - 1 ] in sign:
f. set ( s[ : - 1 ] + k)
btnnames= [ [ 'CE' , 'C' , 'DEL' , '/' ] ,
[ '7' , '8' , '9' , '*' ] ,
[ '4' , '5' , '6' , '-' ] ,
[ '1' , '2' , '3' , '+' ] ,
[ '+/-' , '0' , '.' , '=' ] ]
for line in btnnames:
lineframes= Frame( root)
for key in line:
if key in [ '%d' % i for i in range ( 0 , 10 ) ] :
btn= Button( lineframes, text= key, width= 4 , bg= 'lightblue' ,
font= ( 'Verdana' , 16 ) , command= lambda f= formula, \
k= key: add( f, k) ) . pack( side= LEFT)
if key == 'C' :
btn= Button( lineframes, text= key, width= 4 , bg= 'lightblue' ,
font= ( 'Verdana' , 16 ) , command= lambda f= formula, \
k= key: f. set ( '' ) ) . pack( side= LEFT)
if key in [ '/' , '*' , '-' , '+' ] :
btn= Button( lineframes, text= key, width= 4 , bg= 'lightblue' ,
font= ( 'Verdana' , 16 ) , command= lambda f= formula, \
k= key: add( f, k) ) . pack( side= LEFT)
if key == '.' :
btn= Button( lineframes, text= key, width= 4 , bg= 'lightblue' ,
font= ( 'Verdana' , 16 ) , command= lambda f= formula, \
k= key: f. set ( f. get( ) + k) ) . pack( side= LEFT)
if key == 'DEL' :
btn= Button( lineframes, text= key, width= 4 , bg= 'lightblue' ,
font= ( 'Verdana' , 16 ) , command= lambda f= formula, \
k= key: f. set ( f. get( ) [ : - 1 ] ) ) . pack( side= LEFT)
if key == 'CE' :
btn= Button( lineframes, text= key, width= 4 , bg= 'lightblue' ,
font= ( 'Verdana' , 16 ) , command= lambda f= formula, \
k= key: CE( f) ) . pack( side= LEFT)
if key == '+/-' :
btn= Button( lineframes, text= key, width= 4 , bg= 'lightblue' ,
font= ( 'Verdana' , 16 ) , command= lambda f= formula, \
k= key: XFS( f, k) ) . pack( side= LEFT)
if key == '=' :
btn= Button( lineframes, text= key, width= 4 , bg= 'lightblue' ,
font= ( 'Verdana' , 16 ) , command= lambda f= formula, \
k= key: f. set ( eval ( f. get( ) ) ) ) . pack( side= LEFT)
lineframes. pack( side= TOP)
mainloop( )