1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
| import tkinter import tkinter.font
class Calculator(object): def __init__(self): self.root = tkinter.Tk() self.all_press_lists = [] self.is_press_compute = False self.result = tkinter.StringVar() self.record = tkinter.StringVar()
def main(self): self.root.minsize(300, 550) self.root.title('计算器') self.root.resizable(False,False)
input_bg, num_fg, btn_fg, btn_bg = "#ffffff", "#000000", "#000000", "#ffffff" btn_w, btn_h = 75, 70
my_font = tkinter.font.Font(family='微软雅黑', size=20) self.result.set(0) self.record.set('') label = tkinter.Label(self.root, font=my_font, bg=input_bg, bd='9', fg=num_fg, anchor='se', textvariable=self.record) label.place(width=300, height=120) label2 = tkinter.Label(self.root, font=my_font, bg=input_bg, bd='9', fg=num_fg, anchor='se', textvariable=self.result) label2.place(y=120, width=300, height=80)
btn_ac = tkinter.Button(self.root, text='c', font=my_font, bg=btn_bg, fg=btn_fg, bd=0, command=lambda: self.press_compute('AC')) btn_ac.place(x=btn_w * 0, y=200 + btn_h * 0, width=btn_w, height=btn_h) btn_back = tkinter.Button(self.root, text='←', font=my_font, bg=btn_bg, fg=btn_fg, bd=0, command=lambda: self.press_compute('b')) btn_back.place(x=btn_w * 1, y=200 + btn_h * 0, width=btn_w, height=btn_h) btn_per = tkinter.Button(self.root, text='%', font=my_font, bg=btn_bg, fg=btn_fg, bd=0, command=lambda: self.press_compute('%')) btn_per.place(x=btn_w * 2, y=200 + btn_h * 0, width=btn_w, height=btn_h) btn_divi = tkinter.Button(self.root, text='÷', font=my_font, bg=btn_bg, fg=btn_fg, bd=0, command=lambda: self.press_compute('/')) btn_divi.place(x=btn_w * 3, y=200 + btn_h * 0, width=btn_w, height=btn_h)
btn7 = tkinter.Button(self.root, text='7', font=my_font, bg=btn_bg, fg=num_fg, bd=0, command=lambda: self.press_num('7')) btn7.place(x=btn_w * 0, y=200 + btn_h * 1, width=btn_w, height=btn_h) btn8 = tkinter.Button(self.root, text='8', font=my_font, bg=btn_bg, fg=num_fg, bd=0, command=lambda: self.press_num('8')) btn8.place(x=btn_w * 1, y=200 + btn_h * 1, width=btn_w, height=btn_h) btn9 = tkinter.Button(self.root, text='9', font=my_font, bg=btn_bg, fg=num_fg, bd=0, command=lambda: self.press_num('9')) btn9.place(x=btn_w * 2, y=200 + btn_h * 1, width=btn_w, height=btn_h) btn_mul = tkinter.Button(self.root, text='×', font=my_font, bg=btn_bg, fg=btn_fg, bd=0, command=lambda: self.press_compute('*')) btn_mul.place(x=btn_w * 3, y=200 + btn_h * 1, width=btn_w, height=btn_h)
btn4 = tkinter.Button(self.root, text='4', font=my_font, bg=btn_bg, fg=num_fg, bd=0, command=lambda: self.press_num('4')) btn4.place(x=btn_w * 0, y=200 + btn_h * 2, width=btn_w, height=btn_h) btn5 = tkinter.Button(self.root, text='5', font=my_font, bg=btn_bg, fg=num_fg, bd=0, command=lambda: self.press_num('5')) btn5.place(x=btn_w * 1, y=200 + btn_h * 2, width=btn_w, height=btn_h) btn6 = tkinter.Button(self.root, text='6', font=my_font, bg=btn_bg, fg=num_fg, bd=0, command=lambda: self.press_num('6')) btn6.place(x=btn_w * 2, y=200 + btn_h * 2, width=btn_w, height=btn_h) btn_sub = tkinter.Button(self.root, text='-', font=my_font, bg=btn_bg, fg=btn_fg, bd=0, command=lambda: self.press_compute('-')) btn_sub.place(x=btn_w * 3, y=200 + btn_h * 2, width=btn_w, height=btn_h)
btn1 = tkinter.Button(self.root, text='1', font=my_font, bg=btn_bg, fg=num_fg, bd=0, command=lambda: self.press_num('1')) btn1.place(x=btn_w * 0, y=200 + btn_h * 3, width=btn_w, height=btn_h) btn2 = tkinter.Button(self.root, text='2', font=my_font, bg=btn_bg, fg=num_fg, bd=0, command=lambda: self.press_num('2')) btn2.place(x=btn_w * 1, y=200 + btn_h * 3, width=btn_w, height=btn_h) btn3 = tkinter.Button(self.root, text='3', font=my_font, bg=btn_bg, fg=num_fg, bd=0, command=lambda: self.press_num('3')) btn3.place(x=btn_w * 2, y=200 + btn_h * 3, width=btn_w, height=btn_h) btn_add = tkinter.Button(self.root, text='+', font=my_font, bg=btn_bg, fg=btn_fg, bd=0, command=lambda: self.press_compute('+')) btn_add.place(x=btn_w * 3, y=200 + btn_h * 3, width=btn_w, height=btn_h)
btn0 = tkinter.Button(self.root, text='0', font=my_font, bg=btn_bg, fg=num_fg, bd=0, command=lambda: self.press_num('0')) btn0.place(x=btn_w * 0, y=200 + btn_h * 4, width=btn_w * 2, height=btn_h) btn_point = tkinter.Button(self.root, text='.', font=my_font, bg=btn_bg, fg=num_fg, bd=0, command=lambda: self.press_num('.')) btn_point.place(x=btn_w * 2, y=200 + btn_h * 4, width=btn_w, height=btn_h) btn_equ = tkinter.Button(self.root, text='=', bg='#982425', font=my_font, fg=num_fg, bd=0, command=lambda: self.press_equal()) btn_equ.place(x=btn_w * 3, y=200 + btn_h * 4, width=btn_w, height=btn_h) self.root.mainloop()
def press_num(self, num): if self.is_press_compute is True: self.result.set(0) self.is_press_compute = False old_num = self.result.get() if old_num == '0': self.result.set(num) else: new_num = old_num + num self.result.set(new_num)
def press_compute(self, sign): num = self.result.get() self.all_press_lists.append(num) self.all_press_lists.append(sign) self.is_press_compute = True
if sign == 'AC': self.all_press_lists.clear() self.result.set(0) if sign == 'b': a = num[0:-1] self.all_press_lists.clear() self.result.set(a)
def press_equal(self): cur_num = self.result.get() self.all_press_lists.append(cur_num) compute_str = ''.join(self.all_press_lists) try: calculate_result = eval(compute_str) except: calculate_result = 'bad parameter' self.result.set(calculate_result) self.record.set(compute_str + "=") self.all_press_lists.clear()
if __name__ == '__main__': my_calculator = Calculator() my_calculator.main()
|