0
# Theater Ticket Program Account Creation
# contains user name and password setup and validation

import tkinter
from tkinter import *
from tkinter import messagebox

class AccountGUI:
    def __init__(acct):

        print('In the init for AccountGUI')
        acct.account_window = tkinter.Tk()
        acct.account_window.title("Account Creation")
        acct.account_window.minsize(width=250,height=250)# set the window size
        acct.account_window.resizable(False,False)
        acct.account_window.config(bg='gray5',borderwidth= 3,relief= GROOVE)

        acct.account_window.columnconfigure(0, minsize=10)
        acct.account_window.columnconfigure(1, minsize=50)
        acct.account_window.columnconfigure(2, minsize=10)
        acct.account_window.columnconfigure(3, minsize=5)
        acct.account_window.columnconfigure(4, minsize=50)


        acct.account_window.userName_label = tkinter.Label(acct.account_window, text='Username:', font=("Helvetica",10),\
                                                           bg='gray5',fg='DarkOrange2')
        acct.account_window.userName_label.grid(row=2, column=1, pady=20)

        acct.account_window.userName_entry = tkinter.Entry(acct.account_window,width = 20, \
                                                           font=("Helvetica",10))
        acct.account_window.userName_entry.grid(row=2, column=2, padx=90, pady=20, sticky=W)
        acct.account_window.userName_entry.focus_force()

        acct.account_window.passrequ_label = tkinter.Label(acct.account_window, text= \
                                                               'Create a password of at least six (6) characters,\n'\
                                                               'that contains at least one digit, one uppercase,\n'\
                                                               'and one lowercase letter.',bg='gray5',fg='DarkOrange2',\
                                                                font=("Helvetica",10))
        acct.account_window.passrequ_label.grid(row=4, column=2,padx=10)

        acct.account_window.password_label = tkinter.Label(acct.account_window, text='Password:', font=("Helvetica",10),\
                                                           bg='gray5',fg='DarkOrange2')
        acct.account_window.password_label.grid(row=6, column=1, pady=20)

        acct.account_window.password_entry = tkinter.Entry(acct.account_window,width = 20,\
                                                           font=("Helvetica",10))
        acct.account_window.password_entry.grid(row=6, column=2, padx=90, pady=20, sticky=W)
        acct.account_window.password_entry.focus_force()

        acct.account_window.create_button = tkinter.Button(acct.account_window, text='Create Account', \
                                                           font=("Helvetica",10),bg='gray5',fg='DarkOrange2',\
                                                           command=acct.verify_new_user)
        acct.account_window.create_button.grid(row=15, column=2, columnspan=5,pady=30)

        acct.account_window.cancel_button = tkinter.Button(acct.account_window, text='Cancel', \
                                                           font=("Helvetica",10),bg='gray5',fg='DarkOrange2',\
                                                           command=acct.account_window.destroy)
        acct.account_window.cancel_button.grid(row=15, column=3,pady=30)


#This function verifies that a new user is in fact a new user name
    def verify_new_user(acct):
        valid = True
        newUser = (acct.account_window.userName_entry.get())
        print('newUser is: ' + newUser + '\n')
        try:
            userDataFile = open('acct_user_names.txt', 'r')

            for userTemp in userDataFile:
                print('userTemp from file is: ' + userTemp)
                if newUser == userTemp.rstrip():
                    valid = False

            userDataFile.close()

            if (valid == False):    
                tkinter.messagebox.showinfo('Invalid User Name','That user name already exists.')
                acct.account_window.userName_entry.delete(0,END)
                acct.account_window.userName_entry.focus_force()   
                acct.account_window.lift()
            else:    
                acct.verify_new_pass(newUser)

        except IOError:
            print('No File exists.')


    def verify_new_pass(acct, user):
        valid = False
        txt = (acct.account_window.password_entry.get())      
        print('Getting password   ' + txt)

        if acct.verify_pass(txt):     
            userFile = open('acct_user_names.txt', 'a')    
            userFile.write(user + '\n')
            userFile.close()

            passwordFile = open('acct_user_passwords.txt', 'a')    
            passwordFile.write(txt + '\n')                        
            passwordFile.close()
            tkinter.messagebox.showinfo('Account Creation','Account Successfully Created.')
            acct.account_window.lift()
            acct.account_window.destroy()     
        else:
            tkinter.messagebox.showinfo('Password Validation', '"' + txt + '"' + ' is not a valid password')

    def create_account(self):
         print('Inside create_account and creating the GUI')     
         CreateAcctWin = data_create.acct.AccountGUI()

         CreateAcctWin.account_window.wait_window()

         self.create_acct_button.config(state = DISABLED)  
         self.login_button.config(state = NORMAL)


data_create_acct = AccountGUI

When I run the program I and try to create an account I get this: Create Account

Error message I receive: Error message I receive

3
  • verify_new_pass probably needs self Commented Sep 18, 2019 at 14:00
  • He's using acct instead. Commented Sep 18, 2019 at 14:02
  • The error message is telling you precisely what the problem is. Your AccountGUI class does not have an attribute named verify_pass. Commented Sep 18, 2019 at 14:48

1 Answer 1

1

You're completely missing that verify_pass method in your class. Dunno what it's used for, I assume it's some validation for password length, consisting of both numeric and alpha characters, etc.

def verify_pass(acct, txt):
    if len(txt) < 4:
        return False
    return True

Also, do change that acct to self for consistency (create_account use it) and regarding Python's best practice.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.