用tkinter写一个计算器

原文链接:用tkinter写一个计算器_“鸣鸣”的博客-CSDN博客

禁止转载

用更好的写法欢迎来讨论 

import tkinter as tk
root = tk.Tk()
root.title('计算器')
root.geometry('300x270+100+100')
# 设置半透明
root.attributes("-alpha", 0.87534343393932423424324)
root.resizable(False, False)

# 无脑布局 #
font = ('楷书', 20)
font_16 = ('楷书', 16)

num = tk.StringVar()
num.set('')

tk.Label(root, font=font, textvariable=num, height=2, width=20, justify=tk.LEFT, anchor=tk.SE).\
    grid(row=1, column=1, columnspan=4)

Button_clear = tk.Button(root, text='C', width=5, font=font_16, relief=tk.FLAT, bg='#b1b2b2')
Button_back = tk.Button(root, text='→', width=5, font=font_16, relief=tk.FLAT, bg='#b1b2b2')
Button_division = tk.Button(root, text='÷', width=5, font=font_16, relief=tk.FLAT, bg='#b1b2b2')
Button_multiplication = tk.Button(root, text='×', width=5, font=font_16, relief=tk.FLAT, bg='#b1b2b2')

Button_clear.grid(row=2, column=1, padx=4, pady=2)
Button_back.grid(row=2, column=2, padx=4, pady=2)
Button_division.grid(row=2, column=3, padx=4, pady=2)
Button_multiplication.grid(row=2, column=4, padx=4, pady=2)
#
Button_7 = tk.Button(root, text='7', width=5, font=font_16, relief=tk.FLAT, bg='#eacda1')
Button_8 = tk.Button(root, text='8', width=5, font=font_16, relief=tk.FLAT, bg='#eacda1')
Button_9 = tk.Button(root, text='9', width=5, font=font_16, relief=tk.FLAT, bg='#eacda1')
Button_subtraction = tk.Button(root, text='-', width=5, font=font_16, relief=tk.FLAT, bg='#b1b2b2')

Button_7.grid(row=3, column=1, padx=4, pady=2)
Button_8.grid(row=3, column=2, padx=4, pady=2)
Button_9.grid(row=3, column=3, padx=4, pady=2)
Button_subtraction.grid(row=3, column=4, padx=4, pady=2)
#
Button_4 = tk.Button(root, text='4', width=5, font=font_16, relief=tk.FLAT, bg='#eacda1')
Button_5 = tk.Button(root, text='5', width=5, font=font_16, relief=tk.FLAT, bg='#eacda1')
Button_6 = tk.Button(root, text='6', width=5, font=font_16, relief=tk.FLAT, bg='#eacda1')
Button_addition = tk.Button(root, text='+', width=5, font=font_16, relief=tk.FLAT, bg='#b1b2b2')

Button_4.grid(row=4, column=1, padx=4, pady=2)
Button_5.grid(row=4, column=2, padx=4, pady=2)
Button_6.grid(row=4, column=3, padx=4, pady=2)
Button_addition.grid(row=4, column=4, padx=4, pady=2)
#
Button_1 = tk.Button(root, text='1', width=5, font=font_16, relief=tk.FLAT, bg='#eacda1')
Button_2 = tk.Button(root, text='2', width=5, font=font_16, relief=tk.FLAT, bg='#eacda1')
Button_3 = tk.Button(root, text='3', width=5, font=font_16, relief=tk.FLAT, bg='#eacda1')
Button_equal = tk.Button(root, text='=', width=5, height=3, font=font_16, relief=tk.FLAT, bg='#b1b2b2')

Button_1.grid(row=5, column=1, padx=4, pady=2)
Button_2.grid(row=5, column=2, padx=4, pady=2)
Button_3.grid(row=5, column=3, padx=4, pady=2)
Button_equal.grid(row=5, column=4, padx=4, pady=2, rowspan=2)
#
Button_0 = tk.Button(root, text='0', width=12, font=font_16, relief=tk.FLAT, bg='#eacda1')
Button_decimal_point = tk.Button(root, text='.', width=5, font=font_16, relief=tk.FLAT, bg='#eacda1')


Button_0.grid(row=6, column=1, padx=4, pady=2, columnspan=2)
Button_decimal_point.grid(row=6, column=3, padx=4, pady=2)

# 逻辑编写 #


def click_button(x):
    print('x : \t', x)
    if num.get() == "Error":
        num.set(x)
        return
    num.set(num.get() + x)


def not_():
    num.set('')


def calculation():
    opt_str = num.get()
    try:
        equation = eval(opt_str)
    except ZeroDivisionError:
        num.set("Error")
        return
        # raise ZeroDivisionError("Error: the bad str is incalculable.")

    except SyntaxError:
        num.set("Error")
        return
        # raise SyntaxError("Error: the bad char is incalculable.")
    num.set(equation)


def back():
    back_str = num.get()
    if back_str is not '':
        back_str = list(back_str)
        back_str.pop()
        info_str = ""
        for i in back_str:
            info_str += i
        num.set(info_str)


Button_0.config(command=lambda: click_button('0'))
Button_1.config(command=lambda: click_button('1'))
Button_2.config(command=lambda: click_button('2'))
Button_3.config(command=lambda: click_button('3'))
Button_4.config(command=lambda: click_button('4'))
Button_5.config(command=lambda: click_button('5'))
Button_6.config(command=lambda: click_button('6'))
Button_7.config(command=lambda: click_button('7'))
Button_8.config(command=lambda: click_button('8'))
Button_9.config(command=lambda: click_button('9'))

Button_addition.config(command=lambda: click_button('+'))
Button_subtraction.config(command=lambda: click_button('-'))
Button_multiplication.config(command=lambda: click_button('*'))
Button_division.config(command=lambda: click_button('/'))

Button_back.config(command=back)
Button_clear.config(command=not_)

Button_decimal_point.config(command=lambda: click_button('.'))

Button_equal.config(command=calculation)


def run():
    root.mainloop()


if __name__ == '__main__':
    run()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值