I was trying to do a YouTube downloader program, using the python module pytube and i encountered this error.
TypeError: unsupported operand type(s) for -: 'int' and 'NoneType'
I was trying to display the percentage downloaded on the start download button. (i am using tkinter)
this is my progress function code:
def progress_function(stream=None, chunk=None, file_handle=None, remaining=None):
    file_downloaded=(file_size-remaining)
    per = (file_downloaded/file_size)*100
    dBtn.config(text="{} % Downloaded".format(per))
here i called that
    ob = YouTube(url, on_progress_callback=progress_function())
i tried changing that remaining=None to remaining, but didnt work
this is the whole code i wrote
from pytube import *
from tkinter import *
from tkinter.filedialog import *
from tkinter.messagebox import *
from threading import *
from PIL import ImageTk,Image
file_size = 0
def progress_function(stream=None, chunk=None, file_handle=None, remaining=None):
    file_downloaded=(file_size-remaining)
    per = (file_downloaded/file_size)*100
    dBtn.config(text="{} % Downloaded".format(per))
def startDownload():
    global file_size
    #changing Button text
    url = urlField.get()
    dBtn.config(text='Please wait...')
    dBtn.config(state=DISABLED)
    path_to_save = askdirectory()
    if path_to_save is None:
        return
    ob = YouTube(url, on_progress_callback=progress_function())
    stream_list = ob.streams.first()
    file_size = stream_list.filesize
    stream_list.download(path_to_save)
    print("Done...")
    dBtn.config(text="Start Download")
    dBtn.config(state=NORMAL)
    showinfo("Donwload Completed", "Downloaded Successfully")
def startDownloadThread():
    thread=Thread(target=startDownload)
    thread.start()
# starting gui building
main = Tk()
# setting the title
main.title("Youtube Downloader!!!")
main.geometry("500x600")
#heading image
path = "youtube.png"
img= ImageTk.PhotoImage(Image.open(path))
panel = Label(main, image=img)
panel.pack(side="top", fill="both", expand="no")
#url text field
urlField=Entry(main, font=("verdana", 18), justify=CENTER)
urlField.pack(side=TOP, fill=X, padx=20)
#download button
dBtn = Button(main, text="Start Download", font=("verdana", 18), relief='ridge', command=lambda : startDownloadThread())
dBtn.pack(side=TOP, pady=20)
main.mainloop()
It'll be really helpful, if somebody could help me with the code. :)
 
                        
The callback function expects three arguments:
stream,chunkandremaining. Alsoon_progress_callback=progress_function()should beon_progress_callback=progress_functioninstead.This is the solution to my problem.... Thank you soo much @acw1668