from
tkinter
import
*
__author__
=
'tianshl'
__date__
=
'2017/10/16'
class
Application(Frame):
def
__init__(
self
):
Frame.__init__(
self
)
self
.grid()
self
.mem
=
''
self
.opt
=
''
self
.display
=
StringVar()
self
.display.
set
(
'0'
)
self
.need_cls
=
False
self
.create_widgets()
def
clear(
self
):
self
.mem
=
''
self
.display.
set
(
'0'
)
def
negative(
self
):
self
.display.
set
(
eval
(
'-'
+
self
.display.get()))
def
option(
self
, opt):
if
not
self
.need_cls:
self
.calculate()
self
.opt
=
opt
self
.need_cls
=
True
self
.mem
=
self
.display.get()
def
calculate(
self
):
if
self
.opt:
try
:
self
.display.
set
(
eval
(
self
.mem
+
self
.opt
+
self
.display.get()))
except
Exception:
self
.display.
set
(
'错误'
)
self
.need_cls
=
True
self
.opt
=
''
self
.mem
=
''
def
percent(
self
):
base
=
float
(
self
.mem
or
1
)
/
100
display
=
eval
(
'{}*{}'
.
format
(
self
.display.get(), base))
int_display
=
int
(display)
display
=
int_display
if
display
=
=
int_display
else
display
self
.display.
set
(display)
self
.need_cls
=
True
def
input
(
self
, key):
if
self
.need_cls:
self
.display.
set
(
'0'
)
self
.need_cls
=
False
display
=
self
.display.get()
if
display
=
=
'0'
and
key !
=
'.'
:
self
.display.
set
(key)
else
:
if
'.'
in
display
and
key
=
=
'.'
:
return
self
.display.
set
(display
+
key)
def
create_widgets(
self
):
Entry(
self
, textvariable
=
self
.display, state
=
"readonly"
, width
=
35
).grid(
row
=
0
, column
=
0
, columnspan
=
4
)
keyboards
=
[
[
'C'
,
'+/-'
,
'%'
,
'/'
],
[
'7'
,
'8'
,
'9'
,
'*'
],
[
'4'
,
'5'
,
'6'
,
'-'
],
[
'1'
,
'2'
,
'3'
,
'+'
],
[
'0'
,
'.'
,
'='
]
]
for
row, keys
in
enumerate
(keyboards):
row_num
=
3
+
row
for
col, key
in
enumerate
(keys):
if
key
=
=
'C'
:
command
=
self
.clear
elif
key
=
=
'+/-'
:
command
=
self
.negative
elif
key
=
=
'%'
:
command
=
self
.percent
elif
key
in
[
'+'
,
'-'
,
'*'
,
'/'
]:
command
=
lambda
s
=
key:
self
.option(s)
elif
key
=
=
'='
:
command
=
self
.calculate
else
:
command
=
lambda
s
=
key:
self
.
input
(s)
bt
=
Button(
self
, text
=
key, command
=
command, width
=
6
)
bt.grid(row
=
row_num, column
=
col)
app
=
Application()
app.master.title(
'www.jb51.net - 计算器'
)
app.master.geometry(
"326x170+200+200"
)
app.master.resizable(width
=
False
, height
=
False
)
app.mainloop()