from tkinter import * from tkinter.messagebox import showinfo from tkinter.scrolledtext import ScrolledText root = Tk() class Calculator: def __init__(self): self.rows = 2 self.cols = 1 self.deleteall = None self.wid = 10 self.heigh = 5 self.lists = ['/', '*', '-', '+'] self.txt = None self.makeWidgets() def makeWidgets(self): self.txt = ScrolledText(root, width=self.wid, height=1, font=('Arial Black', 50), wrap=WORD, state=DISABLED) self.txt.grid(row=0, column=1, columnspan=5) root.bind('', self.tab) self.deleteall = Button(root, text='AC', height=self.heigh, width=self.wid, highlightbackground='blue', command=self.delete_all) self.deleteall.grid(row=1, column=1) change = Button(root, text='+/-', height=self.heigh, width=self.wid, highlightbackground='blue', command=self.minus_plus) change.grid(row=1, column=2) percent = Button(root, text='%', height=self.heigh, width=self.wid, highlightbackground='blue', command=self.per_cent) percent.grid(row=1, column=3) for i in range(1, 10): btn = Button(root, text=i, height=self.heigh, width=self.wid, highlightbackground='blue', command=lambda i=i: self.add(i)) if i % 3 == 0: btn.grid(row=self.rows, column=self.cols) self.rows += 1 self.cols = 1 else: btn.grid(row=self.rows, column=self.cols) self.cols += 1 zero = Button(root, text='0', height=self.heigh, width=self.wid, highlightbackground='blue', command=lambda: self.add('0')) zero.grid(row=5, column=1) comma = Button(root, text=',', height=self.heigh, width=self.wid, highlightbackground='blue', command=lambda: self.add('.')) comma.grid(row=5, column=2) gap = Button(root, height=self.heigh, width=self.wid, highlightbackground='blue') gap.grid(row=5, column=3) a = 1 for j in self.lists: sign = Button(root, text=j, width=self.wid, height=self.heigh, fg='black', highlightbackground='red', command=lambda j=j: self.add(j)) sign.grid(row=a, column=4) a += 1 sumsign = Button(root, text='=', width=self.wid, height=self.heigh, highlightbackground='red', command=self.isum) sumsign.grid(row=5, column=4) def add(self, num): self.txt.config(state=NORMAL) self.txt.insert(INSERT, num) self.txt.see(INSERT) self.deleteall.config(text='C') self.txt.config(state=DISABLED) def delete_all(self): self.txt.config(state=NORMAL) self.txt.delete('1.0', END) self.txt.config(state=DISABLED) self.deleteall.config(text='AC') def per_cent(self): self.txt.config(state=NORMAL) try: alltext = self.txt.get('1.0', END) alltext = int(alltext) except: showinfo('EROR', 'Произошла ошибка') self.txt.delete('1.0', END) self.txt.config(state=DISABLED) else: self.txt.delete('1.0', END) self.txt.insert(INSERT, alltext / 100) self.txt.config(state=DISABLED) def minus_plus(self): self.txt.config(state=NORMAL) try: alltext = self.txt.get('1.0', END) alltext = int(alltext) except: showinfo('EROR', 'Произошла ошибка') self.txt.delete('1.0', END) self.txt.config(state=DISABLED) else: self.txt.delete('1.0', END) self.txt.insert(INSERT, alltext * -1) self.txt.config(state=DISABLED) def isum(self): self.txt.config(state=NORMAL) try: alltext = self.txt.get('1.0', END) alltext = eval(alltext) except: showinfo('EROR', 'Произошла ошибка') self.txt.delete('1.0', END) self.txt.config(state=DISABLED) else: self.txt.delete('1.0', END) self.txt.insert(INSERT, alltext) self.txt.config(state=DISABLED) def tab(self, event): self.txt.config(state=NORMAL) self.txt.insert(INSERT, ' ') self.txt.config(state=DISABLED) Calculator() root.mainloop()