Advertisement
amv1991

Calculadora Tkinter

Jan 30th, 2021
1,226
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.52 KB | None | 1 0
  1. import re
  2. import tkinter as tk
  3. from math import sqrt
  4.  
  5. class Application(tk.Frame):
  6.     def __init__(self, master=None):
  7.         super().__init__(master=master)
  8.         self.master = master
  9.         self.pack()
  10.  
  11.         self.input = '0'
  12.         self.draw_frame()
  13.  
  14.     def create_button(self, text, color, command, r, c, cspan=1, w=8):
  15.         self.button = tk.Button(self, bg=color, fg='white')
  16.         self.button['text'] = text
  17.         self.button['command'] = command
  18.         self.button.config(height=2, width=w)
  19.         self.button.grid(row=r, column=c, columnspan=cspan, pady=4)
  20.  
  21.         return self.button
  22.  
  23.     def draw_frame(self):
  24.         self.label = tk.Label(self, font=("Helvetica", 16), bg='gray30', fg='white', anchor='se')
  25.         self.label['text'] = '0'
  26.         self.label.configure(width=23, height=5)
  27.         self.label.grid(row=0, column=0, columnspan=4, pady=10)
  28.  
  29.         self.ce = self.create_button('CE', 'red2', self.clear, 1, 0)
  30.         self.back = self.create_button(u'\u232b', 'gray20', self.back, 1, 1)
  31.         self.mod = self.create_button('%', 'gray20', lambda : self.get('%'), 1, 2)
  32.         self.div = self.create_button('/', 'gray20', lambda : self.get('/'), 1, 3)
  33.  
  34.         self.seven = self.create_button('7', 'gray20', lambda : self.get('7'), 2, 0)
  35.         self.eight = self.create_button('8', 'gray20', lambda : self.get('8'), 2, 1)
  36.         self.nine = self.create_button('9', 'gray20', lambda : self.get('9'), 2, 2)
  37.         self.mul = self.create_button('X', 'gray20', lambda : self.get('*'), 2, 3)
  38.  
  39.         self.four = self.create_button('4', 'gray20', lambda : self.get('4'), 3, 0)
  40.         self.five = self.create_button('5', 'gray20', lambda : self.get('5'), 3, 1)
  41.         self.six = self.create_button('6', 'gray20', lambda : self.get('6'), 3, 2)
  42.         self.minus = self.create_button('-', 'gray20', lambda : self.get('-'), 3, 3)
  43.  
  44.         self.one = self.create_button('1', 'gray20', lambda : self.get('1'), 4, 0)
  45.         self.two = self.create_button('2', 'gray20', lambda : self.get('2'), 4, 1)
  46.         self.three = self.create_button('3', 'gray20', lambda : self.get('3'), 4, 2)
  47.         self.plus = self.create_button('+', 'gray20', lambda : self.get('+'), 4, 3)
  48.  
  49.         self.root = self.create_button('v', 'gray20', lambda : self.get('v'), 5, 0)
  50.         self.zero = self.create_button('0', 'gray20', lambda : self.get('0'), 5, 1)
  51.         self.dot = self.create_button('.', 'gray20', lambda : self.get('.'), 5, 2)
  52.         self.equal = self.create_button('=', 'gray20', self.output, 5, 3)
  53.  
  54.     def get(self, value):
  55.         self.input += str(value)
  56.         self.ops = ['+','-','*','/','%', 'v']
  57.  
  58.         if self.input[-1] in self.ops and self.input[-2] in self.ops:
  59.             self.input = str(self.input[:-2] + self.input[-1])
  60.         if self.input[0] == '0':
  61.             self.input = self.input[1:]
  62.         if self.input[0] in self.ops:
  63.             self.input = self.input[1:]
  64.             self.input = '0' + self.input
  65.  
  66.         self.label['text'] = self.input
  67.  
  68.     def clear(self):
  69.         self.input = '0'
  70.         self.label['text'] = self.input
  71.  
  72.     def back(self):
  73.         self.text = self.input
  74.         if len(self.input) == 1:
  75.             self.clear()
  76.         else:
  77.             self.input = self.text[:-1]
  78.             self.label['text'] = self.input
  79.  
  80.     def output(self):
  81.         root_ = re.compile(r'v\d+')
  82.         all_roots = re.findall(root_, self.input)
  83.         if all_roots:
  84.             for num in all_roots:
  85.                 calc = sqrt(int(num.lstrip('v')))
  86.                 self.input = re.sub(num, '*'+str(round(calc,3)), self.input)
  87.  
  88.                 if self.input[0] == '*' :
  89.                     self.input = self.input[1:]
  90.  
  91.         self.out = str(round(eval(self.input), 5))
  92.         self.label['text'] = self.out
  93.         self.input = self.out
  94.  
  95. root = tk.Tk()
  96. root.geometry('300x400+433+234')
  97. root.wm_title('Calculadora')
  98. root.resizable(False, False)
  99.  
  100. app = Application(master=root)
  101. app.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement