上代码:
#encoding: utf-8
import tkinter
listDat = []
# 计算过程
def clacProcess(key, strData):
# '='则计算结果
if key == '=':
try:
strData.set(eval(strData.get()))
except:
strData.set('Input Error!')
#print(strData.get())
finally:
# 原地清除列表
listDat.clear()
elif key == 'c':
listDat.clear()
# 清空显示框
strData.set('')
else:
listDat.append(key)
# 列表变量连接成一个字符串
strData.set(''.join(listDat))
# 主函数
def main():
win = tkinter.Tk()
win.title('计算器')
# 文本框事件绑定
strData = tkinter.StringVar()
# 创建文本框
entry = tkinter.Entry(win, textvariable=strData)
# 装载文本框
entry.pack(fill=tkinter.X)
# 按键设置
for buttonKey in ['789/', '456*', '123+', '-0.=', 'c']:
keyFrame = tkinter.Frame(win)
keyFrame.pack()
for rowKey in buttonKey:
#button = tkinter.Button(keyFrame, text=rowKey, command=lambda key=rowKey, ent=entry: clacProcess(key, strData))
if len(buttonKey) == 1:
button = tkinter.Button(keyFrame, text=rowKey, command=lambda key=rowKey, ent=entry: clacProcess(key, strData), width=32)
button.pack(side=tkinter.LEFT)
else:
button = tkinter.Button(keyFrame, text=rowKey, command=lambda key=rowKey, ent=entry: clacProcess(key, strData), width=5)
button.pack(side=tkinter.LEFT)
win.mainloop()
# 函数执行语句
if __name__ == '__main__':
main()
运行结果:
不足的地方还有许多。