python怎么用代码写一个计算器(100行代码的简易计算器大全)(1)

有点长,适合收藏,慢慢阅读和分析不同代码的编写和改进。

1.第一例37行代码

from tkinter import * def frame(root, side): #创建横条型框架 w = Frame(root) w.pack(side = side, expand = YES, fill = BOTH) return w def button(root, side, text, command = None): #创建按钮 w = Button(root, text = text,bg='pink', font=10,command = command) w.pack(side = side, expand = YES, fill = BOTH) return w class Calculator(Frame): #继承了Frame类,初始化程序界面的布局 def __init__(self): Frame.__init__(self) self.pack(expand = YES, fill = BOTH) self.master.title('简易计算器1') #窗口标题 self.master.geometry("1020x800 500 0") #窗口大小和位置 display = StringVar() Entry(self, relief = SUNKEN,font=15,fg='red',bg='black',just='right',textvariable = display).pack(side = TOP,expand = YES,fill = BOTH) for key in('123', '456', '789', '%0.'): #添加横条型框架以及里面的按钮 keyF = frame(self, TOP) for char in key: button(keyF, LEFT, char,lambda w = display, c = char:w.set(w.get() c)) opsF = frame(self, TOP) #添加操作符按钮 for char in (' ','-','*','/','='): #倒数第二行,还可以写成in ' -*/=‘,一行四个按钮 if char == '=': btn = button(opsF, LEFT, char) btn.bind('<ButtonRelease - 1>', lambda e, s = self, w = display:s.calc(w), ' ') else: btn = button(opsF, LEFT, char, lambda w = display, s = '%s' %char:w.set(w.get() s)) clearF = frame(self, BOTTOM) #添加清除按钮 button(clearF, LEFT, 'clear',lambda w = display:w.set('')) #清除键内不能设置为0,否则出问题 def calc(self, display): #调用eval函数计算表达式的值 try: display.set(eval(display.get())) except: display.set("ERROR") if __name__ == '__main__': Calculator().mainloop()

图1


python怎么用代码写一个计算器(100行代码的简易计算器大全)(2)

2.第二例41行代码

from tkinter import * #模块导出 root=Tk() root.title("简易计算器2") root.geometry("1020x800 500 0") #代表500,0=x,y,水平线是0,顶上线,水平移动500,水平线向右移动500 reset=True def buttonCallBack(event): global label global reset num=event.widget['text'] if num=='C': #如何按C,清除键,就是归零 label['text']="0" return if num=='←': #如何按C,清除键,就是归零 label['text']=label['text'][0:-1] return if num in "=": label['text']=str(eval(label['text'])) reset=True return s=label['text'] if s=='0' or reset==True: s=" " #注意要有空格,否则0.1 0.2,则0.1的0显示不出来 reset=False label['text']=s num label=Label(root,text="0",background="black",font = ('微软雅黑',30),fg='red',width=18,height=1,anchor="se") label.grid(row=1,columnspan=4,sticky=W) showText="123 456-789*0.%/" #这个按钮的内容和顺序,可以调整的 for i in range(4): #一行4个按钮 for j in range(4): b=Button(root,text=showText[i*4 j],font=4,bg='pink',width=10,height=2) b.grid(row=i 2,column=j) b.bind("<Button-1>",buttonCallBack) showText="C←" for i in range(2): b=Button(root,text=showText[i],width=10,bg='pink',height=2,font=4) b.grid(row=6,column=i) b.bind("<Button-1>",buttonCallBack) b=Button(root,text="=",bg='orange',height=2,font=4) b.grid(row=6,column=2,columnspan=2,sticky="we") b.bind("<Button-1>",buttonCallBack) root.mainloop()

图2


python怎么用代码写一个计算器(100行代码的简易计算器大全)(3)

3.第三例44行代码

from tkinter import * root = Tk() root.title("简易计算器3") root.geometry("1020x800 500 0") #代表500,0=x,y,水平线是0,顶上线,水平移动500,水平线向右移动500 class App: def __init__(self, master): self.master = master self.initWidgets() self.hi = '0' def initWidgets(self): self.show = Label(relief=SUNKEN, font=('Verdana', 24),width=25, bg='black',fg='red', anchor=E) self.show.pack(side=TOP, pady=10) p = Frame(self.master) p.pack(side=TOP) names = (" ", "1" , "2" , "3" , "%" ,"-", "4" , "5" , "6" , "**" , "*", "7" , "8" , "9", "←", "/" , "." , "0" , "clear", "=") #定义元组,非常好,代码简洁,顺序就是按钮的顺序 for i in range(len(names)): b = Button(p, text=names[i], bg='pink',font=('Verdana', 20), width=5) # 创建Button,将Button放入p组件中 b.grid(row=i // 5, column=i % 5) b.bind('<Button-1>', self.click) # 为鼠标左键的单击事件绑定事件处理方法 if b['text'] == 'clear': b.bind('<Button-1>', self.clean) # 为鼠标左键的双击事件绑定事件处理方法 if b['text'] == '←': b.bind('<Button-1>', self.back) self.i = 0 # 定义一个记录输入数字次数的变量 def click(self, event): if(event.widget['text'] in ('0', '1', '2', '3','4', '5', '6', '7', '8', '9', '.')): # 如果用户单击的是数字键或点号 if self.i == 0 : # 判断self.i是否为0,0的话清空show['text']的值 self.show['text'] = '' self.show['text'] = self.show['text'] event.widget['text'] self.i = self.i 1 elif(event.widget['text'] in (' ', '-', '*', '/', '%', '**')): # 如果用户单击了运算符 self.show['text'] = self.show['text'] event.widget['text'] # 把输入的数字与输入的字符相结合,组成一个数学运算式 elif(event.widget['text'] == '=' and self.show['text'] is not None): self.hi = self.show['text'] # 赋值给self.hi self.show['text'] = str(eval(self.hi)) #使用eval函数计算表达式的值 self.hi = '0' self.i = 0 def clean(self, event): # 点击clear(恢复)按钮时,程序清空计算结果、将表达式设为0 self.hi = '0' self.show['text'] = '' #归零 def back(self, event): #←的back的功能定义 self.hi = self.show['text'] self.show['text'] = self.hi[0:-1] App(root) root.mainloop()

图3


python怎么用代码写一个计算器(100行代码的简易计算器大全)(4)

4.第四例63行代码

from tkinter import * from functools import partial def GUI(): root=Tk() root.title("简易计算器4") root.geometry("1020x800 500 0") entry=Entry(root,justify="right",bg='black',fg='red',font=20) entry.grid(row=0,column=0,columnspan=4,sticky=N,padx=5,pady=5) #输入框,justify="right"表示多行文本的对齐方式是右对齐 myButton=partial(Button,root,bg='pink',padx=10,font=10,pady=3,activebackground='#B3EE3A') b7=myButton(text='7',command=lambda : get_input(entry,'7')) #按钮第一层 b7.grid(row=1,column=0,sticky=N S E W) #按钮大小通过sticky=N S E W来填充,变大 b8=myButton(text='8',command=lambda : get_input(entry,'8')) b8.grid(row=1,column=1,sticky=N S E W) b9=myButton(text='9',command=lambda : get_input(entry,'9')) b9.grid(row=1,column=2,sticky=N S E W) b_add=myButton(text=' ',command=lambda : get_input(entry,' ')) b_add.grid(row=1,column=3,sticky=N S E W) b4=myButton(text='4',command=lambda : get_input(entry,'4')) #按钮第二层 b4.grid(row=2,column=0,sticky=N S E W) b5=myButton(text='5',command=lambda : get_input(entry,'5')) b5.grid(row=2,column=1,sticky=N S E W) b6=myButton(text='6',command=lambda : get_input(entry,'6')) b6.grid(row=2,column=2,sticky=N S E W) b_subtract=myButton(text='-',command=lambda : get_input(entry,'-')) b_subtract.grid(row=2,column=3,sticky=N S E W) b1=myButton(text='1',command=lambda : get_input(entry,'1')) #按钮第三层 b1.grid(row=3,column=0,sticky=N S E W) b2=myButton(text='2',command=lambda : get_input(entry,'2')) b2.grid(row=3,column=1,sticky=N S E W) b3=myButton(text='3',command=lambda : get_input(entry,'3')) b3.grid(row=3,column=2,sticky=N S E W) b_multiply=myButton(text='*',command=lambda : get_input(entry,'*')) b_multiply.grid(row=3,column=3,sticky=N S E W) b0=myButton(text='0',command=lambda : get_input(entry,'0')) #按钮第四层 b0.grid(row=4,column=0,sticky=N S E W) b_point=myButton(text='.',command=lambda : get_input(entry,'.')) b_point.grid(row=4,column=1,sticky=N S E W) b_clear=myButton(text='%',command=lambda : get_input(entry,'%')) b_clear.grid(row=4,column=2,columnspan=1,sticky=N S E W) b_divide=myButton(text='/',command=lambda : get_input(entry,'/')) b_divide.grid(row=4,column=3,sticky=N S E W) b_clear=myButton(text='clear',command=lambda : clear(entry)) #按钮第五层 b_clear.grid(row=5,column=0,columnspan=1,sticky=N S E W) b_back=myButton(text='<-',command=lambda : backspace(entry)) b_back.grid(row=5,column=1,sticky=N S E W) b_equal=myButton(text='=',bg='orange',command=lambda : calculate(entry)) b_equal.grid(row=5,column=2,columnspan=2,sticky=N S E W) root.mainloop()#这个循环在GUI里 def get_input(entry,argu): entry.insert(END,argu) def backspace(entry):#按钮"<-"事件处理函数 input_len=len(entry.get()) entry.delete(input_len-1) def clear(entry):#按钮"clear"事件处理函数 entry.delete(0,END) def calculate(entry):#按钮"="事件处理函数 input = entry.get() output = str(eval(input.strip())) #eval函数使用起来,代码就很简单简洁 clear(entry) entry.insert(END, output) if __name__ == "__main__": GUI()

图4


python怎么用代码写一个计算器(100行代码的简易计算器大全)(5)

5.第五例69行代码

from tkinter import * from functools import partial def get_input(entry, argu): entry.insert(END, argu) def backspace(entry): input_len = len(entry.get()) entry.delete(input_len - 1) def clear(entry): entry.delete(0, END) def calc(entry): input = entry.get() output = str(eval(input.strip())) clear(entry) entry.insert(END, output) def cal(): root = Tk() root.title("简易计算器5") root.geometry("1020x800 500 0") entry = Entry(root, justify="right",bg='black',fg='red',font=10,width=50) #显示文本框的设置 entry.grid(row=0, column=0, columnspan=4, sticky=N W S E, padx=5, pady=5)#显示文本框的大小 button_bg = 'pink' #按钮的初始背景颜色 button_active_bg = '#E5E35B' #按钮激活的背景颜色,黄色 myButton = partial(Button, root, bg=button_bg, font=20,padx=10, pady=3, activebackground = button_active_bg) #第一层 b7 = myButton(text='7', command=lambda : get_input(entry, '7')) b7.grid(row=1, column=0, columnspan=1,pady=5,sticky=N S E W) b8 = myButton(text='8', command=lambda : get_input(entry, '8')) b8.grid(row=1, column=1, columnspan=1,pady=5,sticky=N S E W) b9 = myButton(text='9', command=lambda : get_input(entry, '9')) b9.grid(row=1, column=2, columnspan=1,pady=5,sticky=N S E W) b10 = myButton(text=' ', command=lambda : get_input(entry, ' ')) b10.grid(row=1, column=3, columnspan=1,pady=5,sticky=N S E W) #第二层 b4 = myButton(text='4', command=lambda : get_input(entry, '4')) b4.grid(row=2, column=0, columnspan=1,pady=5,sticky=N S E W) b5 = myButton(text='5', command=lambda : get_input(entry, '5')) b5.grid(row=2, column=1, columnspan=1,pady=5,sticky=N S E W) b6 = myButton(text='6', command=lambda : get_input(entry, '6')) b6.grid(row=2, column=2, columnspan=1,pady=5,sticky=N S E W) bj = myButton(text='-', command=lambda : get_input(entry, '-')) bj.grid(row=2, column=3, columnspan=1,pady=5,sticky=N S E W) #第三层 b1 = myButton(text='1', command=lambda : get_input(entry, '1')) b1.grid(row=3, column=0, columnspan=1,pady=5,sticky=N S E W) b2 = myButton(text='2', command=lambda : get_input(entry, '2')) b2.grid(row=3, column=1, columnspan=1,pady=5,sticky=N S E W) b3 = myButton(text='3', command=lambda : get_input(entry, '3')) b3.grid(row=3, column=2, columnspan=1,pady=5,sticky=N S E W) bc = myButton(text='*', command=lambda : get_input(entry, '*')) bc.grid(row=3, column=3, columnspan=1,pady=5,sticky=N S E W) #第四层 b0 = myButton(text='0', command=lambda : get_input(entry, '0')) b0.grid(row=4, column=0, columnspan=1, padx=3, pady=5, sticky=N S E W) bpc = myButton(text='%', command=lambda : get_input(entry, '%')) bpc.grid(row=4, column=1, columnspan=1, padx=3, pady=5, sticky=N S E W) bd = myButton(text='.',command=lambda : get_input(entry, '.')) bd.grid(row=4, column=2, columnspan=1,pady=5,sticky=N S E W) bcf = Button(root, text='/', bg=button_bg, font=20,padx=10, pady=3,command=lambda : get_input(entry, '/')) bcf.grid(row=4, column=3, columnspan=1,pady=5,sticky=N S E W) #第五层 bb = Button(root, text='←', bg=button_bg, font=20,padx=10, pady=3,command=lambda : backspace(entry), activebackground = button_active_bg) bb.grid(row=5, column=0, columnspan=1,pady=5,sticky=N S E W) bcl = Button(root, text='Clear', bg=button_bg, font=20,padx=10, pady=3,command=lambda : clear(entry), activebackground = button_active_bg) bcl.grid(row=5, column=1, columnspan=1,pady=5,sticky=N S E W) bdy = Button(root, text='=', bg='orange', font=20,padx=10, pady=3,command=lambda : calc(entry), activebackground = button_active_bg) bdy.grid(row=5, column=2, columnspan=2, padx=3, pady=5, sticky=N S E W) root.mainloop() if __name__ == '__main__': cal()

图5


python怎么用代码写一个计算器(100行代码的简易计算器大全)(6)

6.第六例70行代码

from tkinter import * from tkinter.ttk import * #不支持背景颜色改变 root = Tk() # 开始界面的实现 root.title("简易计算器6") # 添加标题 root.geometry("1020x800 500 0") #代表500,0=x,y,水平线是0,顶上线,水平移动500,水平线向右移动500 def frame(master): #定义frame的属性 w = Frame(master) #将共同的属性作为默认值, 以简化Frame创建过程 w.pack(side=TOP, expand=YES, fill=BOTH) return w def button(master, text,command): #提取共同的属性作为默认值, 使Button创建过程简化 w = Button(master,text=text,command=command,width=6) #比较好,将共同属性提取,并统一设置,这样代码简洁 w.pack(side=LEFT, expand=YES, fill=BOTH, padx=2, pady=2) return w def back(text): #将text最末的字符删除并返回 if len(text) > 0: return text[:-1] else: return text def calc(text): #用eval方法计算表达式字符串 try: if (sep_flag.get() == 0): return eval(del_sep(text)) else: return add_sep(str(eval(del_sep(text)))) except (SyntaxError, ZeroDivisionError, NameError): return 'Error' def add_sep(text): dot_index = text.find('.') if dot_index > 0: text_head = text[:dot_index] text_tail = text[dot_index:] elif dot_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 def del_sep(text): #删除数字串中所有的千位分隔符 return text.replace(',', '') text = StringVar() #定义 text.set('0') #初始化为0 sep_flag = IntVar() sep_flag.set(0) Entry(root,textvariable=text,font=30,just='right').pack(expand=YES, fill=BOTH, padx=2, pady=4) # 创建文本框 style = Style() style.configure('TButton',background='pink',font=10,padding=3) #按钮字体大小设置,bg不行,需要background才行 for key in ('789 ', '456-', '123*', '0%./','='): #这种方法非常简洁,值得推荐;# 每行四个, 创建其余四行按钮 fsymb = frame(root) for char in key: if char == '=': button(fsymb,char, lambda t=text: t.set(calc(t.get()))) else: button(fsymb, char, lambda t=text, c=char: t.set(t.get() c)) four_b = frame(root) # 创建第一行四个按钮 button(four_b, '←',lambda t=text: t.set(back(t.get()))) button(four_b, 'Clear', lambda t=text: t.set('0')) #不加0,则按clear时不是归零,是空白 button(four_b, '±', lambda t=text: t.set('-'))#这里是显示正负号 button(four_b, 'ON', lambda t=text: t.set('')) root.mainloop()

图6


python怎么用代码写一个计算器(100行代码的简易计算器大全)(7)

显示框的颜色设定和字体颜色设定,还不会

7.第七例78行代码

class Calculator: import tkinter as tk import tkinter.messagebox as mbox def __init__(self): self.window = self.tk.Tk() self.window.title('简易计算器7') self.window.geometry("1020x800 500 0") self.label_show = self.tk.Label(text='', anchor='se', font=('黑体', 20), bg='black',fg='red') self.label_show.place(x=0, y=0, width=880,height=80) #通过width大小来改变显示框的大小 self.set_buttons() self.window.mainloop() def set_buttons(self):#按钮设置 x0, y0, x_width, y_width,height = 0, 90, 220, 80, 40 #通过x_width, y_width大小设置来改变按钮的大小 b7 = self.tk.Button(text='7', bd=2, bg='pink',font='黑体') #第一层 b7.place(x=x0,y=y0,width=x_width, height=y_width) b8 = self.tk.Button(text='8', bd=2, bg='pink',font='黑体') b8.place(x=x0 x_width*1, y=y0,width=x_width,height=y_width) b9 = self.tk.Button(text='9', bd=2, bg='pink',font='黑体') b9.place(x=x0 x_width*2, y=y0,width=x_width,height=y_width) b_add = self.tk.Button(text=' ', bd=2, bg='pink',font='黑体') b_add.place(x=x0 x_width*3, y=y0,width=x_width,height=y_width) b4 = self.tk.Button(text='4', bd=2, bg='pink',font='黑体') #第二层 b4.place(x=x0,y=y0 y_width,width=x_width,height=y_width) b5 = self.tk.Button(text='5', bd=2, bg='pink',font='黑体') b5.place(x=x0 x_width*1, y=y0 y_width,width=x_width,height=y_width) b6 = self.tk.Button(text='6', bd=2, bg='pink',font='黑体') b6.place(x=x0 x_width*2, y=y0 y_width,width=x_width,height=y_width) b_subtract = self.tk.Button(text='-', bd=2, bg='pink',font='黑体') b_subtract.place( x=x0 x_width*3, y=y0 y_width,width=x_width,height=y_width) b1 = self.tk.Button(text='1', bd=2, bg='pink',font='黑体') #第三层 b1.place(x=x0,y=y0 y_width*2,width=x_width,height=y_width) b2 = self.tk.Button(text='2', bd=2,bg='pink', font='黑体') b2.place(x=x0 x_width*1, y=y0 y_width*2,width=x_width,height=y_width) b3 = self.tk.Button(text='3', bd=2, bg='pink',font='黑体') b3.place(x=x0 x_width*2, y=y0 y_width*2,width=x_width, height=y_width) b_mutiply = self.tk.Button(text='*', bd=2, bg='pink',font='黑体') b_mutiply.place(x=x0 x_width*3, y=y0 y_width*2, width=x_width,height=y_width) b0 = self.tk.Button(text='0', bd=2, bg='pink',font='黑体') #第四层 b0.place(x=x0,y=y0 y_width*3,width=x_width,height=y_width) bb = self.tk.Button(text='%', bd=2, bg='pink',font='黑体') bb.place(x=x0 x_width,y=y0 y_width*3,width=x_width,height=y_width) b_point = self.tk.Button(text='.', bd=2, bg='pink',font='黑体') b_point.place(x=x0 x_width*2, y=y0 y_width*3,width=x_width,height=y_width) b_divid = self.tk.Button(text='/', bd=2, bg='pink',font='黑体') b_divid.place(x=x0 x_width*3, y=y0 y_width*3,width=x_width,height=y_width) b_clear = self.tk.Button( text='clear', bd=2, bg='pink',font='黑体') #第五层 b_clear.place(x=x0,y=y0 y_width*4,width=x_width, height=y_width) b_back = self.tk.Button( text='←', bd=2,bg='pink', font='黑体') b_back.place(x=x0 x_width*1,y=y0 y_width*4,width=x_width, height=y_width) b_equal = self.tk.Button( text='=', bd=2,bg='orange', font='黑体') b_equal.place(x=x0 x_width*2, y=y0 y_width*4,width=x_width*2, height=y_width) b7.bind_class('Button', '<Button-1>', self.click_button) # 绑定Button的点击事件 def click_button(self, event): input_event = event.widget['text'] self.label_show['text'] = self.label_show['text'] input_event try: cal_symbol = [' ', '-', '*', '/'] if self.label_show['text'][-1] in cal_symbol and self.label_show['text'][-2] in cal_symbol: header = self.label_show['text'][:-2] footer = self.label_show['text'][-1] self.label_show['text'] = header footer except: pass if event.widget['text'] == '=': try: res_bit = 2 # 计算保留的位数 res = eval(self.label_show['text'][:-1]) # 计算点击 “=” 之前的计算表达式 self.label_show['text'] = str(round(float(res), res_bit)) except ZeroDivisionError: self.mbox.showerror(title='错误', message='老兄,除法计算时!除数不能为0!') except: self.mbox.showerror(title='未知名错误', message='老兄,算式错误,请检查!') elif event.widget['text'] == '←': back_res = self.label_show['text'][:-5] # 点击的‘back’也计算在内,它占4个字符,因此是倒数5位去掉 self.label_show['text'] = back_res elif event.widget['text'] == 'clear': self.label_show['text'] = '0' # 不加0,则清除后为空格 start = Calculator()

图7


python怎么用代码写一个计算器(100行代码的简易计算器大全)(8)

几次方不行,不能通过比如2**3来计算

8,第八例83行代码

from tkinter import * root = Tk() root.title("简易计算器8") root.geometry("1020x800 500 0") def GetInputValue(ShowNumEntry, Value):#用来显示值 ShowNumEntry.insert(END,Value) def GetNumOne():#按钮1并显示 GetInputValue(ShowNumEntry,"1") def GetNumTwo():#按钮2并显示 GetInputValue(ShowNumEntry,"2") def GetNumThree():#按钮3并显示 GetInputValue(ShowNumEntry,"3") def GetNumFour():#按钮4并显示 GetInputValue(ShowNumEntry,"4") def GetNumFive():#按钮5并显示 GetInputValue(ShowNumEntry,"5") def GetNumSix():#按钮6并显示 GetInputValue(ShowNumEntry,"6") def GetNumSeven():#按钮7并显示 GetInputValue(ShowNumEntry,"7") def GetNumEight():#按钮8并显示 GetInputValue(ShowNumEntry,"8") def GetNumNine():#按钮9并显示 GetInputValue(ShowNumEntry,"9") def GetNumZero():#按钮0并显示 GetInputValue(ShowNumEntry,"0") def GetDot():#按钮.并显示 GetInputValue(ShowNumEntry,".") def GetPlus():#按钮 并显示 GetInputValue(ShowNumEntry," ") def GetMinus():#按钮-并显示 GetInputValue(ShowNumEntry,"-") def GetClean():#清除 ShowNumEntry.delete(0,END) def GetMultiply():#按钮*并显示 GetInputValue(ShowNumEntry,"*") def GetDivision():#按钮/并显示 GetInputValue(ShowNumEntry,"/") def GetPec():#按钮/并显示 GetInputValue(ShowNumEntry,"%") #显示% def GetResult():#计算结果并显示 result = eval(ShowNumEntry.get()) GetClean() ShowNumEntry.insert(0,str(result)) ShowNumEntry = Entry(root, bg='black',fg='red',justify="right",width = 45,font=20) ShowNumEntry.grid(row=0, column=0,columnspan=6) #第一行 b1 = Button(root,text = "1",bg='pink',font=8, width = 6,height = 2,command = GetNumOne) b1.grid(row=1, column=0) b2 = Button(root,text = "2", bg='pink',font=8,width = 6,height = 2,command = GetNumTwo) b2.grid(row=1, column=1) b3 = Button(root,text = "3", bg='pink',font=8,width = 6,height = 2,command = GetNumThree) b3.grid(row=1, column=2) bj = Button(root,text = " ", bg='pink',font=8,width = 6,height = 2,command = GetPlus) bj.grid(row=1, column=3) bjh = Button(root,text = "-",bg='pink',font=8, width = 6,height = 2,command = GetMinus) bjh.grid(row=1, column=4) by = Button(root,text = "%",bg='pink', font=8,width = 6, height = 2, command = GetPec) by.grid(row=1, column=5) #第二行 b4 = Button(root,text = "4",bg='pink',font=8, width = 6,height = 2,command = GetNumFour) b4.grid(row=2, column=0) b5 = Button(root,text = "5",bg='pink', font=8,width = 6,height = 2,command = GetNumFive) b5.grid(row=2, column=1) b6 = Button(root,text = "6",bg='pink', font=8,width = 6,height = 2,command = GetNumSix) b6.grid(row=2, column=2) bd = Button(root,text = ".",bg='pink', font=8,width = 6,height = 2,command =GetDot) bd.grid(row=2, column=3) bch = Button(root,text = "*", bg='pink',font=8,width = 6,height = 2,command = GetMultiply) bch.grid(row=2, column=4) bxg = Button(root,text = "/",bg='pink', font=8,width = 6, height = 2, command = GetDivision) bxg.grid(row=2, column=5) #第三行 b7 = Button(root,text = "7",bg='pink',font=8,width = 6, height = 2, command = GetNumSeven) b7.grid(row=3, column=0) b8 = Button(root,text = "8",bg='pink', font=8,width = 6, height = 2, command = GetNumEight) b8.grid(row=3, column=1) b9 = Button(root,text = "9", bg='pink',font=8,width = 6, height = 2, command = GetNumNine) b9.grid(row=3, column=2) b0 = Button(root,text = "0",bg='pink',font=8, width = 6, height = 2, command = GetNumZero) b0.grid(row=3, column=3) bcl = Button(root,text = "Clear",bg='pink',font=8,width = 6,height = 2,command = GetClean) bcl.grid(row=3, column=4) bdy = Button(root,text = "=", bg='orange',font=8,width = 6, height = 2,command=GetResult) bdy.grid(row=3, column=5) root.mainloop()

图8


python怎么用代码写一个计算器(100行代码的简易计算器大全)(9)

9.第9例91行代码

from tkinter import * #导出模块 root=Tk() #定义窗口 root.title("简易计算器9") root.geometry("1020x800 500 0") #代表500,0=x,y,水平线是0,顶上线,水平移动500,水平线向右移动500 class CreateFrame(): def __init__(self,frame,width,height): self.frame=frame self.width=width self.height=height def creat_frame(self): creat_frame=Frame(self.frame,width=self.width,height=self.height,bg='#ddd') return creat_frame class CreateButton(): def __init__(self): self.text=[['CE','Clear','←','%'],['*','/','-',' '],['0','1','2','3'],['4','5','6','7'],['8','9','.','=']] def create_button(self,frame): for i in range(0,5): for j in range(0,4): button1 =Button(frame, text=self.text[i][j], font=8,width=8, height=2, bg='pink')#按钮大小和颜色设置 button1.grid(row=i, column=j, padx=3, pady=3) frame.pack() return button1 class CreatLabel(): def label(self,frame): label = Label(frame, bg='black',fg='red',font=('微软雅黑', 15),width=30,anchor='e',text='0') label.pack( anchor='e') frame.pack() return label class BindBtton(): def btton_class_bind(self,button,label,label_frist): button.bind_class('Button','<Button-1>',lambda e: self(e,label,label_frist)) def __call__(self,e,label,label_frist): def change(): # 显示运算表达式 if e.widget['text']=='.'and '.'in label['text']: if ' 'not in label['text']and '-'not in label['text']and '*'not in label['text']and '/'not in label['text']: return #判断第一个数是不是能加小数点 if label['text'].count('.')==1 : #判断第二个数是否能加小数点 label['text'] =label['text'] e.widget['text'] return label['text'] for i in label['text'].split(')')[1:]: #按括号分割 判断第二数以后的表达式是否能加小数点 if '.'in i and i.count('.')==1: continue else: label['text'] = e.widget['text'] return label['text'] if label['text']=='0'and label['text']!='.': label['text'] =e.widget['text'] return label['text'] else: label['text']=label['text'] e.widget['text'] return label['text'] def operation():# 运算 if e.widget['text']=='=': if label['text'][-1] not in ' -*/=%': labe2['text']=eval(label['text']) label['text'] ='0' else: labe2['text'] = eval(label['text'][:-1]) elif ' 'in label['text']or '-'in label['text'] or '*'in label['text'] or '/'in label['text'] or '%'in label['text']: if e.widget['text']in ' -*/=%': if label['text'][-1] not in ' -*/=%': label['text']='(' label['text'] ')' e.widget['text'] label['text'] ='(' str(eval(label['text']) ) ')' e.widget['text'] else: label['text'] = e.widget['text'] else: label['text'] =e.widget['text'] def equal(): pass def delete(): label['text']=label['text'][:-1] #倒数第一切片删除 def clear(): #定义清除键的操作值 label['text']='0' labe2['text']='0' if e.widget['text'] in '1234567890.': change() elif e.widget['text'] in ['Clear']: clear() elif e.widget['text'] in ' -*/=%': operation() elif e.widget['text'] in '←': delete() frame1=CreateFrame(root,290,20).creat_frame() label=CreatLabel().label(frame1) frame3=CreateFrame(root,290,20).creat_frame() labe2=CreatLabel().label(frame3) frame2=CreateFrame(root,290,360) frame=frame2.creat_frame() button=CreateButton().create_button(frame) BindBtton().btton_class_bind(button,label,labe2) root.mainloop()

图9


python怎么用代码写一个计算器(100行代码的简易计算器大全)(10)

小数相加,第一个的0不能显示;其次几次方不行,未能通过比如2**3实现

总结:

有点长,非常经典,值得收藏,有兴趣的可以熟悉熟悉,并自行解决。

,