2011年8月

使用 Python 和 Tkinter 实现的一个简单的计算器:

代码

#!/usr/bin/env python
# encoding: utf-8
"""
File: simple_calculator.py
Created by Pan Tao on 2011-09-24.
Copyright (c) 2011 CosTony.Com. All rights reserved.
"""
from Tkinter import *
def frame(root, side):
w = Frame(root)
w.pack(side = side, expand = YES, fill = BOTH)
return w
def button(root, side, text, command = None):
w = Button(root, text = text, command = command)
w.pack(side = side, expand = YES, fill = BOTH)
return w
class Calculator(Frame):
def __init__(self):
Frame.__init__(self)
self.pack(expand = YES, fill = BOTH)
self.master.title('Simple Calculator')
self.master.iconname('calculator')
display = StringVar()
Entry(self, relief = SUNKEN, textvariable = display).pack(side = TOP, expand = YES, fill = BOTH)
for key in ('123', '456', '789', '-0.'):
keyF = frame(self, TOP)
for char in key:
button(keyF, LEFT, char, lambda w=display, s = ' {} '.format(char): w.set(w.get() + s))
opsF = frame(self, TOP)
for char in '+-*/=':
if char is '=':
btn = button(opsF, LEFT, char)
btn.bind('<ButtonRelease-1>', lambda e,s = self, w = display: s.calc(w), '+')
else:
btn = button(opsF, LEFT, char, lambda w = display, c = char: w.set(w.get() + ' ' + c + ' '))
clearF = frame(self, BOTTOM)
button(clearF, LEFT, 'Clear', lambda w = display: w.set(''))
def calc(self, display):
try:
display.set(`eval(display.get())`)
except ValueError:
display.set('ERROR')
if __name__ == '__main__':
Calculator().mainloop()

详细的步骤

  1. 整个程序从两个函数开始, frame() 与 button() ,这两个函数可以让我们更回方便的创建小工具,而且是整个程序更加紧凑,我使用的是 pack 布局管理器(在程序开发中,经常会将一些最常用的函数或方法写为公共函数,这样可以使得程序更加紧凑,可读性也更好,更易维护)。
  2. 我使用 Frame 构造器构造了最顶级的封闭框架,接着设置了它的名称与图标。
  3. 接着,创建了该计算器最上部的显示条(当我们使用该计算器时,输入与结果都会在这里面显示),同时还定义了一个Tkinter变量,它可以访问Tkinter小工具的内容。
  4. 在 Python 中,任何一个字符串都是一个元素为字符的序列,所以,它们都是可以被迭代的。
  5. 我使用了 button() 函数来创建了多个按钮,并且将其添加到它们的上一级框架中。
  6. 我们为