植物百科网
当前位置: 首页 农业百科

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

时间:2023-05-17 作者: 小编 阅读量: 2 栏目名: 农业百科

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


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

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实现

总结:

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

    推荐阅读
  • 突触名词解释(突触是什么意思)

    突触名词解释突触是指一个神经元的冲动传到另一个神经元或传到另一细胞间的相互接触的结构。突触是神经元之间在功能上发生联系的部位,也是信息传递的关键部位。在光学显微镜下,可以看到一个神经元的轴突末梢经过多次分支,最后每一小支的末端膨大呈杯状或球状,叫做突触小体。这些突触小体可以与多个神经元的细胞体或树突相接触,形成突触。从电子显微镜下观察,可以看到,这种突触是由突触前膜、突触间隙和突触后膜三部分构成。

  • 《守望先锋》对战局影响大招top一览 守望先锋对局战绩

    今天小编要为大家带来的是玩家“黑呦酱”分享的《守望先锋》对战局影响大招top一览,感兴趣的玩家赶紧一起来看看吧!守望先锋大招分为四类,控制类,自身BUFF类,辅助类以及伤害类,由于伤害类大部分使用大招时,本体无法进行有效杀伤,且控制类及自身BUFF类需要其他技能的配合,so,此间因素也要加入考量。

  • 运动后喝黑咖啡还能燃脂吗 运动时喝黑咖啡会加快燃脂吗?

    2、运动过程中身体脂肪会加速燃烧,从而具有一定减肥作用;而黑咖啡热量比较小,加上其中含有大量的咖啡因以及维生素、纤维素物质,适量喝可以促进人体肠胃蠕动,加速脂肪代谢分解,对减肥具有促进作用。

  • 斯威汽车质量怎么样(斯威质量好不好)

    2018年6月起,斯威“品质特工队”以四大火炉的重庆作为起点,途径海南、吐鲁番、格尔木三地,历时近一年进行了数十万公里极限环境适应性试验。极端干燥高温环境下,常见车内温度往往会狂飙到60℃以上,而在斯威G01的车厢里,却始终能够保持清新凉爽的状态。一整套严酷考验下来,斯威G01的性能表现完全得以充分认证。这样一算,斯威G01差不多完成了近百万公里的专业级严酷考验。

  • 春天兰花怎么养 春天兰花怎么养浇水

    白墨兰花哪个品种最好白墨兰花是墨兰的珍贵变异品种假鳞茎椭圆形,已有数百年栽培历史,流传至今,不下十数个品种,它叶色莹润、体态优雅、幽香静远、且抗病,白墨兰花比较好的品种一般分企剑和软剑两个品系。什么兰花开花最香兰花品种很多,按花香来排,在兰花界春兰居首,惠兰次之,随后便是建兰、墨兰和寒兰,春兰的花香味最正宗,持久性也极强。

  • 奔驰e300l前进挡总共有几个(你看了奔驰22款E300L升级这套原厂HUD抬头显示效果觉得怎么样)

    从行车安全的角度来考虑,加装一台HUD是非常有必要的。HUD的全称是HeadUpDisplay,中文翻译过来就是抬头显示器。今天星骏汇小陈通过以上的产品配件图了解,我们看到这台奔驰22款E300L升级HUD抬头显示所需要更换的配件有,抬显仪器,高配仪表盖板,高配仪表电脑,雨量传感器,空调管升级HUD抬头显示把仪表台上的那一块盖板换掉,换成高配的预留好显示器孔位的盖板,装上显示器,从而使仪表显示的内容投射到挡风玻璃上面。

  • 儿童葫芦丝表演(通城千人共奏葫芦丝)

    儿童葫芦丝表演香城都市报讯 10月27日,通城县隽水中学参加湖北省“黄鹤杯”美育节节目视频录制现场,七、八年级千名学生,同奏乐曲《龙的传人》。该校相关负责人介绍,本学期,每天下午预备铃响5分钟,七、八年级各班集体合奏葫芦丝。丝竹声声,已渐成校园一道靓丽的风景线。近年来,该校贯彻落实社会主义核心价值观,注重未成年人思想道德建设,坚持开设中华传统和特色民族特色教育课程,促进学生“德智体”全面发展。

  • 鸡娃时代孩子的成长之道(与其1岁就开始鸡娃)

    出生时大脑发育已经完成25%,1岁完成了50%,3岁完成了60%,6岁达到90%。现在小学虽然是零基础入学,取消了统一考试,但是它对学生的要求并没有降低。吃够了佛系养娃的亏,橙子家的老二断然不肯再佛系养了。北京卫视于2018年摄制的纪录片《起跑线》中,有一个7岁的北京女孩令人印象深刻。她的家庭,在北京三环内有一套房,一辆车。妈妈认为,孩子从小培养兴趣,靠的是父母的指引。

  • 环氧树脂的作用与用途(环氧树脂有什么作用与用途)

    环氧树脂的作用与用途具有优良的物理和电绝缘性能,强度高、收缩性低,耐腐蚀以及有高绝缘的优势,所以被称为万能胶。电器、电机绝缘封装件的浇注。从常压浇注、真空浇注已发展到自动压力凝胶成型。长时间接触胶水时,有人会有细微的皮肤过敏和细微瘙痒疼痛的情况,建议在运用时戴上防护手套,如果出现了这样的情况,需要用酒精擦洗,然后用清水冲洗干净。

  • 明月曾照江东寒剧情(明月曾照江东寒剧情介绍)

    明月曾照江东寒剧情剧情简介:美少女战清泓是武林副盟主战破敌之女,从小被父亲禁止涉及江湖事。十年一期的武林大会即将来临,战清泓瞒着家人偷跑下山,立志夺取武林盟主之位。战清泓与温宥也开始互生情愫,奈何最终被世俗礼法所阻碍。与此同时,江湖上风起云涌,战清泓发现自己自幼背诵的家训竟是人人趋之若鹜的第一神功《鹤羽剑法》。