I am a beginner and made my first GUI calculator using tkinter.I want to convert my py file to exe file.I tried using pyinstaller
,auto-py-to-exe
but when the file is ready and I run ,it shown windows error box Cannot run Script main
, name of my file is main.
import getpass
from os import mkdir
import tkinter,os,time
from functools import partial
from tkinter import PhotoImage
from tkinter.constants import SEL
class Calculator(tkinter.Tk):
'''This class creates calculator using tkinter module'''
def __init__(self):
super().__init__()
# Changing height and width of window
self.geometry('279x316')
self.resizable(False,False)
self.title('Calculator')
image=PhotoImage('download.ico')
self.iconbitmap(image)
# Creating tkinter varible to store what user has entered
self.__store_value=tkinter.StringVar()
self.__store_value.set('')
#Creating entry widget for input
self.__input_user=tkinter.Entry(self,font='lucidia 20 bold',textvariable=self.__store_value)
self.__input_user.pack(fill='x')
self.bind('<Return>',partial(self.click,'='))
# This Buttons will be ther in calculator
self._button_dict={"C":"C","(":"(",")":")","/":"/",
"9":9,"8":8,"7":7,"*":"*",
"6":6,"5":5,"4":4,"+":"+",
"3":3,"2":2,"1":1,"-":"-",
"His":"His","0":0,".":".","=":"="}
def create_button(self,row=5,column=4):
'''Creates button in the window,button_dict contains name of each button and an argument to be given to click function when pressed,no of rows in calculator and no. of columns'''
self.__main_frame=tkinter.Frame(self)
self.__main_frame.pack(fill='both')
k=0
for i in range(row):
for r in range(column):
try:
button=tkinter.Button(self.__main_frame,text=list(self._button_dict.keys())[k],command=partial(self.click,self._button_dict[list(self._button_dict.keys())[k]]),font='lucidia 20 bold')
button.grid(row=i,column=r,ipadx=15)
self._button_dict[list(self._button_dict.keys())[k]]=button
k+=1
except Exception as e:
k+=1
# configuring each button
self._button_dict['His'].grid(ipadx=1)
self._button_dict['C'].grid(ipadx=13)
self._button_dict['('].grid(ipadx=18)
self._button_dict[')'].grid(ipadx=18)
self._button_dict['.'].grid(ipadx=18)
self._button_dict['+'].grid(ipadx=11)
self._button_dict['='].grid(ipadx=12)
self._button_dict[r'*'].grid(ipadx=14)
def click(self,arg,*event):
if arg=='C':
'''If click on C clears the text area'''
self.__store_value.set('')
self.update()
elif arg=='His':
if os.path.exists(f"C:\\Users\\{getpass.getuser()}\\Calculator\\Log.txt"):
self.__his=tkinter.Tk()
self.__his.title('History')
im=PhotoImage('History.ico')
self.__his.iconbitmap(im)
with open(f"C:\\Users\\{getpass.getuser()}\\Calculator\\Log.txt") as f:
for i in f.read().split('\n'):
if i=='':
pass
else:
tkinter.Label(self.__his,text=i,relief='solid').pack()
else:
self.__store_value.set("Error")
self.update()
elif arg=='=':
if self.__store_value.get()=='':
pass
else:
try:
l=self.__store_value.get()
self.__store_value.set(eval(self.__store_value.get()))
if os.path.exists(f"C:\\Users\\{getpass.getuser()}\\Calculator\\Log.txt"):
with open(f'C:\\Users\\{getpass.getuser()}\\Calculator\\Log.txt',"a") as f:
f.write(f"{l}={eval(l)}\n")
else:
try:
os.mkdir(f'C:\\Users\\{getpass.getuser()}\\Calculator')
except Exception as e:
pass
with open(f'C:\\Users\\{getpass.getuser()}\\Calculator\\Log.txt',"a") as f:
f.write(f"{l}={eval(l)}\n")
except Exception as e:
self.__store_value.set('Error')
self.update()
else:
if self.__store_value.get()=='Error':
self.__store_value.set(arg)
self.update()
else:
self.__store_value.set(f'{self.__store_value.get()}{arg}')
self.update()
def on_closing(self):
try:
os.remove(f'C:\\Users\\{getpass.getuser()}\\Calculator\\Log.txt')
except Exception as e:
pass
self.destroy()
if __name__ == "__main__":
app=Calculator()
app.create_button()
app.protocol("WM_DELETE_WINDOW", app.on_closing)
app.mainloop()
I got error while uploading ico images so u can find images at https://github.com/01TanmayDaga/Calculator
Please help me!!