原文链接:用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()