本文实例讲述了Python实现的计算器功能。分享给大家供大家参考,具体如下:
源码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
# -*- coding:utf-8 -*-
#! python2
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.zzvips.com - 计算器' )
# 设置窗口尺寸/位置
app.master.geometry( "326x170+200+200" )
# 设置窗口不可变
app.master.resizable(width = False , height = False )
# 主消息循环:
app.mainloop()
|
运行效果:
希望本文所述对大家Python程序设计有所帮助。
原文链接:https://blog.csdn.net/xiaobuding007/article/details/78267773