python 3.x--tkinter(三): 简易计算器

行为心理学研究表明:

21天以上重复会形成习惯;90天的重复会形成稳定习惯。一个动作,重复21天就会变成习惯性的动作;同样,任何一个想法,重复21天,或者重复验证21次,就会变成习惯性想法。所以,一个观念如果被别人或者自己验证21次以上,一定已经变成你的信念。

习惯真的很神奇,可以无意识的影响着我们的思维和行为
当然,最好是拥有一个好习惯啦!

习惯的养成可简要分为三阶段:

1~7天,“刻意,不自然”状态,
7~21天,“刻意,自然”状态
21~90天,“不刻意,自然”

和朋友正刻意培养一些习惯,这周很忙碌,所以感觉到一点点疲惫,对,习惯养成记现在正处于不自然和自然状态的衔接点。。。

希望习惯值不断+1

本周,找到一个常见的例子:

简易计算器

先上图:

这里写图片描述

代码如下:

from tkinter import *
from tkinter.ttk import *

def frame(master):
    w = Frame(master)
    w.pack(side=TOP, expand=YES, fill=BOTH,pady=4)
    return w

def button(master, text, command):
    w = Button(master, text=text, command=command, width=5)
    w.pack(side=LEFT, expand=YES, fill=BOTH, padx=3, pady=5)
    return w

def calc(text):
    try:
        if (cal_flag.get() == 0):
            return eval(text)
        else:
            return calculate(str(eval(text)))
    except:
        return 'Error'

def calculate(text):
    float_index = text.find('.')
    if float_index > 0:
        text_head = text[:float_index]
        text_tail = text[float_index:]
    elif float_index < 0:
        text_head = text
        text_tail = ''
    else:
        text_head = ''
        text_tail = text

    list_ = [char for char in text_head]
    length = len(list_)
    tmp_index = 3
    while length - tmp_index > 0:
        list_.insert(length - tmp_index, ',')
        tmp_index += 3
    list_.extend(text_tail)
    new_text = ''
    for char in list_:
        new_text += char

    return new_text

# 开始界面的实现
root = Tk()
root.title("Calculator") # 标题
text = StringVar()
cal_flag = IntVar()
cal_flag.set(0)
# 创建文本框
Entry(root, textvariable=text).pack(expand=YES, fill=BOTH, padx=25, pady=10)

style = Style()
style.configure('TButton', padding=20)
addbtn = frame(root)
button(addbtn, 'C', lambda t=text: t.set(''))
button(addbtn,'<-', lambda t=text: t.set(back(t.get())))
button(addbtn,'±', lambda t=text: t.set('-('+t.get()+')'))
# 数字及操作按钮
for key in ('789/', '456*', '123-', '0.=+'):
    cal = frame(root)
    for char in key:
        if char == '=':
            button(cal, char, lambda t=text: t.set(calc(t.get())))
        else:
            button(cal, char, lambda t=text, c=char: t.set(t.get()+c))

root.mainloop()

代码说明:

1、为了美观,引用了tkinter的组件ttk,不使用也可以,如下图,其实也不丑
这里写图片描述

2、四个函数:

(1)frame,创建条形框架。(Frame是屏幕上的一块矩形区域,多是用来作为容器(container)来布局窗体。 )
简单创建框架语句:

 w = Frame ( master, option, ... )

其中,master是父窗口
(2)button,创建按钮
(3)calc,用eval方法计算表达式字符串,函数中运用了try-else-except异常处理,可能错误形式有:除数为0,语法错误等,直接“except:”一劳永逸,但无法知道究竟是什么错误
(4)calculate, 这里考虑了三种情况: 无整数部份, 无小数部份, 同时有整数和小数部份,由于字符串是不可改变的, 这里由字符串生成列表以便执行insert操作和extend操作, 操作完成后最由列表生成字符串返回
float_index用来表示浮点数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值