百摩网
当前位置: 首页 生活百科

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

时间:2023-05-17 作者: 小编 阅读量: 11 栏目名: 生活百科

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


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

1.第一例37行代码

from tkinter import *def frame(root, side): #创建横条型框架 w = Frame(root) w.pack(side = side, expand = YES, fill = BOTH) return wdef 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 wclass 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


2.第二例41行代码

from tkinter import * #模块导出root=Tk()root.title("简易计算器2")root.geometry("1020x800 500 0") #代表500,0=x,y,水平线是0,顶上线,水平移动500,水平线向右移动500reset=Truedef 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 returns=label['text'] if s=='0' or reset==True: s=" " #注意要有空格,否则0.1 0.2,则0.1的0显示不出来 reset=False label['text']=s numlabel=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


3.第三例44行代码

from tkinter import *root = Tk()root.title("简易计算器3")root.geometry("1020x800 500 0") #代表500,0=x,y,水平线是0,顶上线,水平移动500,水平线向右移动500class 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.i1 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


4.第四例63行代码

from tkinter import *from functools import partialdef 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


5.第五例69行代码

from tkinter import *from functools import partialdef 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


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,水平线向右移动500def frame(master): #定义frame的属性 w = Frame(master) #将共同的属性作为默认值, 以简化Frame创建过程 w.pack(side=TOP, expand=YES, fill=BOTH) return wdef 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 wdef back(text): #将text最末的字符删除并返回 if len(text) > 0: return text[:-1] else: return textdef 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_textdef del_sep(text): #删除数字串中所有的千位分隔符 return text.replace(',', '')text = StringVar() #定义text.set('0') #初始化为0sep_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


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

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'] = headerfooter 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


几次方不行,不能通过比如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


9.第9例91行代码

from tkinter import * #导出模块root=Tk() #定义窗口root.title("简易计算器9")root.geometry("1020x800 500 0") #代表500,0=x,y,水平线是0,顶上线,水平移动500,水平线向右移动500class 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_frameclass 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 button1class 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 labelclass 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


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

总结:

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

    推荐阅读
  • 三火念什么 两个火念什么

    2、焱字组词:焱焱、火焱、阳焱、焱悠、焱飞、焱锐、焱举、翕焱、轻焱、焱起、焱至、森焱、焱勇、熛焱、焱炎、烟焱、焱集、焱槖、火炎焱燚。

  • 土豆炒洋葱的家常做法(土豆炒洋葱的做法)

    土豆炒洋葱的家常做法?接下来我们就一起去了解一下吧!土豆炒洋葱的家常做法材料:土豆一个,洋葱一个,青椒一个,葱姜,盐少许,蚝油一勺,生抽一勺,糖少许,香油少许。炒锅倒油烧热爆香葱姜。稍微翻炒片刻再加入青椒继续翻炒均匀,淋入香油炒均匀关火,完成。

  • 潘多拉盒子的由来(西方典故之潘多拉的盒子)

    潘多拉盒子的由来潘多拉是古希腊神话中的第一个尘世女子。普罗米修斯盗取天火给人间,主神宙斯为了惩罚人类,命令神用黏土塑成一个年轻貌美、虚伪狡诈的姑娘,亲切的取名为“潘多拉”!潘多拉的寓意是“具有一切天赋且美貌并存的女人”!并且将她许配给普罗米修斯的弟弟厄庇米修斯。厄庇米修斯不顾禁忌地接过了魔盒,潘多拉趁机将它打开,随之而来的就是各种恶习、灾难和疾病迸发从盒子里飞了出来。

  • 宿迁办理就业登记的情形

    1、失业人员以下列情形之一实现就业的,应及时向发放《登记证》的社区劳动保障服务中心报告,并办理就业登记,《登记证》上的失业登记记录失效:已被用人单位录用的从事个体经营或创办企业,并领取工商营业执照的已从事有稳定收入的劳动,并且月收入不低于当地最低工资标准的。

  • 女生说宁缺毋滥这句话对吗(这才是交友的根本原则)

    交友要宁缺毋滥人们在寻找自己的友谊的过程也是在满足他人寻找友谊的过程。有时候,某个人在你眼中是最佳的朋友,他可以看懂你的心,知道你的思想,但这并不意味着他就是你的“生死之交”。真正的生死之交不但能够读懂你内心的想法,读懂你的心理,他还知道如何安慰你的受伤的心灵,驱散你心头的阴霾。交友宁缺毋滥,需要有一定的标准。宁缺毋滥,拒绝狐朋狗友,这是交友的根本原则。

  • 矢量图是什么意思(矢量图的含义)

    矢量图是什么意思矢量图,称为面向对象的图像或绘图图像,在数学上定义为一系列由线连接的点。矢量图是根据几何特性来绘制图形,矢量可以是一个点或一条线,矢量图只能靠软件生成,文件占用内在空间较小,因为这种类型的图像文件包含独立的分离图像,可以自由无限制的重新组合。

  • 朋友圈余生很短说说(有关余生很短的说说精选)

    我始终相信一句话:只有自己足够强大,才不会被别人践踏。同样的一瓶饮料,便利店里2块钱,五星饭店里60块。很多的时候,一个人的价值取决于所在的位置。人生最重要的,不是已经失去的,也不是尚未得到的,而是此刻拥有的。不为往事扰,只愿余生笑。人性一个最特别的弱点就是:在意别人如何看待自己。这一程,希望你活得烈马青葱,不为他人的目光所累。

  • 油桃的功效与作用吃法(油桃的功效与作用)

    油桃,是普通桃的变种,口感脆嫩,营养丰富,是夏天常见的一种水果。油桃的功效与作用补气血、养阴生津油桃有补益气血、养阴生津的作用,尤其适合大病之后,气血亏虚,面黄肌瘦,心悸气短者食用。一个油桃含有的维生素的量差不多就能满足一个成人的一天所需量。桃仁止咳、降血压桃仁提取物有抗凝血作用,并能抑制咳嗽中枢而止咳,同时能使血压下降,可用于高血压病人的辅助治疗。

  • 金手镯应该戴在哪只手上(是什么原因)

    金手镯应该戴在哪只手上应该戴在左手,这样的依据除了个人的佩戴习惯外,还可以从佛教文化、传统文化、人体结构等几个方面来理解。人类主要使用右手从事工种,包括佛教忌讳的杀生、放火、污秽等工作,因此右手是不污秽、邪恶之手,会不定期地把污浊的能量从这里释放出去。金手镯戴于左手,离心脏最近,是心与金手镯最佳的沟通与融合。因此,懂得诠释东方文化中的儿女情长的女性一般都会把金手镯佩戴于左手。

  • 7到13万这四款车最值得买(年轻人不知道买什么轿车)

    不过时代变了,最近几年国内轿车市场发生了微妙变化,自主品牌的轿车正在像当年的SUV车型一样齐头并进。而至于设计方面它也读懂了中国人的审美,被称为小号“H9”,整车流露出了端庄、大气之感。第二款:长安UNI-V2.0T版长安UNI-V算是今年在轿车市场中相当火爆的车型,凭借着大溜背、电动升降尾翼,以及10.89万元的起售价,狠狠的在年轻人的心中刷了一波存在感,销量也随之上升。至于MG7后续是否会推出1.5T车型还需期待它的正式发布。