-3

I keep getting a not defined eror when my variable is clearly defined what am i doing wrong? I pasted a majority of the code because there may be more than 1 factor. Thanks for any help

My Error

   return self.func(*args)
  File "c:/Users/dacos/Documents/text.py", line 43, in click
    file=open(user_info,"w")
NameError: name 'user_info' is not defined

(To get to the line of error navigate to the function session() then function click() user_info was defined in the function regiser_user()(bottom of the code) where i made it global) All of the code:


def session():
      registerbutton.pack_forget()
      loginbutton.pack_forget()
      title.pack_forget()
      global count
      global clicker
      clicker1 = Label(screen, text="click me", font=("Ink Free", 25))
      clicker1.pack()
      def click():
       global count
       count+=variable
       clicker1.config(text=count)
       global user_info
       file=open(user_info,"w")
       file.write("lifetime Clicks: " + str(filecount) + "\n")
       file.write("Coins: " + str(filecoins))
       file.close()
      button = Button(screen,text='Click me!!!')
      button.config(command=click) 
      button.config(font=('Ink Free',50,'bold'))
      button.config(bg="#6f00ff")
      button.config(fg="#00ffe1")
      button.config(activebackground="#00ff73")
      button.config(activeforeground="#00ff73")
      button.pack()
      x2 = Button(text="Button", command=x2clicks)
      x2.pack()
  
def login_verify():
  
  username1 = username_verify.get()
  password1 = password_verify.get()
  username_entry1.delete(0, END)
  password_entry1.delete(0, END)
  list_of_files = os.listdir()
  if username1 in list_of_files:
    file1 = open(username1, "r")
    verify = file1.read().splitlines()
    if password1 in verify:
      login_success()
      if filecount in file1:
        count1 = filecount
        print("yes")
      else: 
        print("no")  
  else:
    notf = Button(screen2,fg="#ff0000", bg="#000000",font=("Ink Free", 25), text="Username or password not found register instead?", command= register)
    notf.pack()
   
def login():
  global screen2
  screen2 = Toplevel(screen)
  screen2.title("Login")
  screen2.geometry("1700x1000")
  screen2.config(bg= "#000000")
  Label(screen2, text = "Please enter details below to login", font=("Ink Free", 50)).pack()
  Label(screen2, text = "", bg="#000000").pack()
  global username_verify
  global password_verify
  username_verify = StringVar()
  password_verify = StringVar()
  global username_entry1
  global password_entry1
  Label(screen2, text = "Username * ", font=("Ink Free", 25)).pack()
  username_entry1 = Entry(screen2, textvariable = username_verify, font=("Ink Free", 20))
  username_entry1.pack()
  Label(screen2, text = "", bg="#000000").pack()
  Label(screen2, text = "Password * ",font=("Ink Free", 25)).pack()
  password_entry1 = Entry(screen2, textvariable = password_verify, font=("Ink Free", 20), show="*")
  password_entry1.pack()
  Label(screen2, text = "", bg="#000000").pack()
  Button(screen2, text = "Login", width = 10, height = 1,font=("Ink Free", 20), command = login_verify).pack()
def register():
 global regscreen
 regscreen = Toplevel(screen)
 regscreen.title("Register")
 regscreen.geometry("1700x1000")
 title.pack()
 label3 = Label(screen,text="", height= 12,bg="#000000")
 global password 
 global username
 username = StringVar()
 password = StringVar()
 Label(regscreen, text = "Please enter details: ", font=("Ink Free", 50),bg="#ffffff").pack()
 Label(regscreen, text = "Username * ",font=("Ink Free", 25),bg="#ffffff").pack()
 global user_entry
 global pass_entry
 user_entry = Entry(regscreen,bg="#666666",font=("Ink Free",20), textvariable = username,width=50)
 user_entry.pack()
 Label(regscreen, text = "",bg="#000000").pack()
 Label(regscreen, text = "Password * ",font=("Ink Free", 25),bg="#ffffff").pack()
 pass_entry = Entry(regscreen,font=("Ink Free",20), textvariable = password, bg="#666666", show="*", width=50)
 pass_entry.pack()
 Label(regscreen, text = "",bg="#000000").pack()
 Label(screen,text="h",font=("Ink Free,", 25), bg="#000000").pack()
 Label(regscreen, text = "",bg="#000000").pack()
 Label(regscreen, text = "",bg="#000000").pack()
 Label(regscreen, text = "",bg="#000000").pack()
 regscreen.config(bg="#000000")
 regbutton = Button(regscreen, text="Register",width=30,command= register_user,font=("Ink Free", 25),bg="#ffffff")
 regbutton.pack()
screen.title("Welcome")
title = Button(screen, text="Welcome to the clicker game",bg="#ffffff", font=("Ink Free", 50))
loginbutton = Button(screen, text="Login",width=30,bg="#ffffff",command = login,font=("Ink Free", 25))
registerbutton = Button(screen, text="Register",width=30,bg="#ffffff", command = register, font=("Ink Free", 25))
label = Label(screen,text="", height= 2, bg="#000000")
label2 = Label(screen,text="", height= 2,bg="#000000")
label3 = Label(screen,text="", height= 12,bg="#000000")
label3.pack()
title.pack(side = TOP)
label2.pack()
loginbutton.pack()
label.pack()
registerbutton.pack()


def register_user():
  global username
  global password
  global regscreen
  global user_info
  user_info = username.get()
  pass_info = password.get()
  user_entry.delete(0, END)
  pass_entry.delete(0, END)
  Label(regscreen,text="Registration success! Please go to the now login(3)",font=("Ink Free", 25)).pack()
  time.sleep(1)
  Label(regscreen,text="Registration success! Please go to the now login(2)",font=("Ink Free", 25)).pack()
  time.sleep1
  login()
  global count
  count += variable
  global filecount
  global filecoins
  filecount += 1
  filecoins += 1
  file=open(user_info,"w")
  file.write(user_info + "\n")
  file.write(pass_info+"\n")
  file.write("lifetime Clicks: " + str(filecount) + "\n")
  file.write("Coins: " + str(filecoins))
  file.close()
  global colors
   
screen.mainloop()
Tang0
  • 5
  • 4

1 Answers1

1

The variable 'user_info' is not defined. Even if you try to use it using 'global' you need to define it like:

user_file = StringVar() 

or similar.

BTW. Using global variables is seen as a bad 'smell'. Try using a class or similar construct to pull together the data which belongs together.

Andreas Florath
  • 4,418
  • 22
  • 32