Calcdoc.py: a tkinter app to memorize operations

You may think that a calculator is not so important today that we have it on every mobile, you can use spreadsheets etc. We are in a world dominated by computers and mobile phone full of apps… but I think it could always be interesting to have a calculator and a text editor… together. I don’t know if there are other apps like this, but I don’t know any, so I thought that could be a nice thing to add some features to my lastes minicalculator app. This app followed this progression:

I think that this option is cool and not so obvious. You ca use a notepad, you can use a calculator, but I do not have an app that makes me do memorize the operation and write notes around them at the same time. I think to a possible use of it while I am doing things on the fly and I want to be able to go back to the note to see what those operations were about. This is the code, followed by the video that explains how I changed the previous code (second item of the list of the progress above) to the new one. Have fun coding!

import tkinter as tk
import os


# This class inherit from Frame
class App(tk.Frame):
    def __init__(self):
        tk.Frame.__init__(self)
        self.option_add("*Font", "arial 20 bold")
        self.pack(expand=tk.YES, fill=tk.BOTH)
        self.master.title("Calculator")
        self.master.tk.call('wm', 'iconphoto', self.master._w, tk.PhotoImage(file='calculator.png'))
        # the widgets: display, clear button...
        self._display()
        self.list_of_ops()

    def _display(self):
        display = tk.StringVar()
        entry = tk.Entry(
            self,
            relief=tk.FLAT,
            textvariable=display,
            justify='right',
            bd=15,
            bg='orange')
        entry.pack(side=tk.TOP)
        entry.focus()
        entry.bind("<Return>", lambda x: self.calc(display))
        entry.bind("<Escape>", lambda x: display.set(""))
        self.master.bind("<Control-s>", self.save)

    def save(self, event):
        "Save the memo about the operations"
        with open("memo.txt", "w", encoding="utf-8") as file:
            file.write(self.text.get("0.0", tk.END))
        os.startfile("memo.txt")

    def list_of_ops(self):
        self.text = tk.Text(self, height=10, width=30)
        self.text.pack(fill="both", expand=1)


    def calc(self, display):
        try:
            ris = eval(display.get())
            if str(display.get()) == str(ris):
                display.set("")
            else:
                self.text.insert(tk.END, display.get() + "=" + str(ris) + "\n")
                display.set(ris)
        except NameError as e:
            display.set("ERR: press ESC")


if __name__ == '__main__':
    a = App()
    a.mainloop()

Live coding video calculator app


Subscribe to the newsletter for updates
Tkinter templates
Avatar My youtube channel

Twitter: @pythonprogrammi - python_pygame

Videos

Speech recognition game

Pygame's Platform Game

Other Pygame's posts

 

Published by pythonprogramming

Started with basic on the spectrum, loved javascript in the 90ies and python in the 2000, now I am back with python, still making some javascript stuff when needed.