Update from https://codereview.stackexchange.com/q/229264/209774

I have implemented a username and password log in and main application to be used after successful log in.

I am ready for some more feedback.

My main troubles is error handling. For example log in screen, I'll need to implement statement to show if user does not exist etc.. Nothing too fancy. Also, maybe add a scroll bar and center the screen for both classes when opened up.

Also, if there is nothing inside a folder, the drop down menu dissapears and shows nothing, I'll need to work on that too. Maybe pop another screen saying 'No files in folder, come back later'.

Here is my full code:

    from tkinter import *
    from tkinter import DISABLED, messagebox
    import tkinter.ttk as ttk
    import os
    import glob
    from PIL import Image, ImageTk, ImageGrab
    from pathlib import Path
    import pyautogui
    import time
    
    def main():
        root = Tk()
        app = Window1(root)
        root.mainloop()
    
    class Window1:
        def __init__(self,master):
            self.master = master
            self.master.title("User Log In")
            self.master.geometry('400x150')
            self.frame = Frame(self.master)
            self.frame.pack(fill="both", expand=True)
    
    
            self.label_username = Label(self.frame, text="Username: ",font=("bold",16))
            self.entry_username = Entry(self.frame, font = ("bold", 14))
            self.label_password = Label(self.frame, text="Password: ",font=("bold",16))
            self.entry_password = Entry(self.frame, show="*", font = ("bold", 14))
    
            self.label_username.pack()
            self.entry_username.pack()
            self.label_password.pack()
            self.entry_password.pack()
    
            self.logbtn = Button(self.frame, text="Login", font = ("bold", 10), command=self._login_btn_clicked)
            self.logbtn.pack()
    
        #close and stop tkinter running in backround, also see line #64
        def on_closing(self):
            self.master.destroy()
    
    
        def _login_btn_clicked(self):
            # print("Clicked")
            username = self.entry_username.get()
            password = self.entry_password.get()
    
            # print(username, password)
            account_list = [line.split(":", maxsplit=1) for line in open("passwords.txt")]
            # list of 2-tuples. Usersnames with colons inside not supported.
            accounts = {key: value.rstrip() for key, value in account_list}
            # Convert to dict[username] = password, and slices off the line ending.
            # Does not support passwords ending in whitespace.
            if accounts[username] == password:
                self.master.withdraw()
                self.newWindow = Toplevel(self.master)
                self.newWindow.protocol("WM_DELETE_WINDOW", self.on_closing)
                self.app = Window2(self.newWindow, window1 = self)
            else:
                messagebox.showinfo("User message", "Invalid username or password specified please try again")
    
    
    class Window2:
        def __init__(self,master, window1):
            notebook = ttk.Notebook(master)
    
            notebook.pack(expand = 1, fill = "both")
            #Frames
            main = ttk.Frame(notebook)
            manual = ttk.Frame(notebook)
            notebook.add(main, text='Main-Screen')
            notebook.add(manual, text='Manual')
            self.window1 = window1
    
    
            def clock():
                t=time.strftime('%d/%m/%Y, %H:%M:%S, ',time.localtime())
                if t!='':
                    self.display_time.config(text=t,font='times 15')
                main.after(100,clock)
            self.display_time=Label(main)
            self.display_time.grid(column = 3, row = 0)
            clock()
    
    
            username = self.window1.entry_username.get()
            self.User = Label(main, text = 'User: '+ username, font = ('15'))
            self.User.grid(column = 4, row = 0)
    
    
            var1 = IntVar()
            var2 = IntVar()
            var3 = IntVar()
            var4 = IntVar()
            var5 = IntVar()
            var6 = IntVar()
            var7 = IntVar()
            var8 = IntVar()
            var9 = IntVar()
            var10 = IntVar()
            var11 = IntVar()
            var12 = IntVar()
    
            #Displaying checkboxes and assigning to variables
    
            self.Checkbox1 = Checkbutton(main, text="Ingredients present in full (any allergens in bold with allergen warning if necessary)", variable=var1)
            self.Checkbox1.grid(column = 2, row = 1, sticky = W)
    
            self.Checkbox2 = Checkbutton(main, text="May Contain Statement.", variable=var2)
            self.Checkbox2.grid(column = 2, row = 2, sticky = W)
    
            self.Checkbox3 = Checkbutton(main, text="Cocoa Content (%).", variable=var3)
            self.Checkbox3.grid(column = 2, row = 3, sticky = W)
    
            self.Checkbox4 = Checkbutton(main, text="Vegetable fat in addition to Cocoa butter", variable=var4)
            self.Checkbox4.grid(column = 2, row = 4, sticky = W)
    
            self.Checkbox5 = Checkbutton(main, text="Instructions for Use.", variable=var5)
            self.Checkbox5.grid(column = 2, row = 5, sticky = W)
    
            self.Checkbox6 = Checkbutton(main, text="Additional warning statements (pitt/stone, hyperactivity etc)", variable=var6)
            self.Checkbox6.grid(column = 2, row = 6, sticky = W)
    
            self.Checkbox7 = Checkbutton(main, text="Nutritional Information Visible", variable=var7)
            self.Checkbox7.grid(column = 2, row = 7, sticky = W)
    
            self.Checkbox8 = Checkbutton(main, text="Storage Conditions", variable=var8)
            self.Checkbox8.grid(column = 2, row = 8, sticky = W)
    
            self.Checkbox9 = Checkbutton(main, text="Best Before & Batch Information", variable=var9)
            self.Checkbox9.grid(column = 2, row = 9, sticky = W)
    
            self.Checkbox10 = Checkbutton(main, text="Net Weight & Correct Font Size.", variable=var10)
            self.Checkbox10.grid(column = 2, row = 10, sticky = W)
    
            self.Checkbox11 = Checkbutton(main, text="Barcode - Inner", variable=var11)
            self.Checkbox11.grid(column = 2, row = 11, sticky = W)
    
            self.Checkbox12 = Checkbutton(main, text="Address & contact details correct", variable=var12)
            self.Checkbox12.grid(column = 2, row = 12, sticky = W)
    
    
            #PrintScreen
            def PrintScreen():
                pyautogui.keyDown('alt')
                pyautogui.keyDown('printscreen')
                pyautogui.keyUp('printscreen')
                pyautogui.keyUp('alt')
                self.dataSend['state'] = 'normal'
    
            def var_states():
                text_file = open("logfile.txt", "a")
                text_file.write("Username: [%s], option 1: [%d], option 2: [%d], option 3: [%d], option 4: [%d], option 5: [%d], option 6: [%d], option 7: [%d], option 8: [%d], option 9: [%d], option 10: [%d], option 11: [%d], option 12: [%d], Original Sign Off: [%s]\n" % (username,var1.get(),  var2.get(),  var3.get(),  var4.get(),  var5.get(),  var6.get(),  var7.get(),  var8.get(),  var9.get(),  var10.get(),  var11.get(),  var12.get(), self.p))
                text_file.close()
                self.img = ImageGrab.grabclipboard()
                self.img.save("%s" % ('//SERVER/shared_data/Technical/Label Sign Off Sheets/sign off project/Signed/'+ os.path.basename(self.p).strip('- to sign.jpg') + ' ' + username+ '.jpg'), 'JPEG')
                ed = ('//SERVER/shared_data/Technical/Label Sign Off Sheets/sign off project/Signed/'+ os.path.basename(self.p).strip('- to sign.jpg') +' ed'+ '.jpg')
                Nb = ('//SERVER/shared_data/Technical/Label Sign Off Sheets/sign off project/Signed/'+ os.path.basename(self.p).strip('- to sign.jpg') +' Nb'+ '.jpg')
                jj = ('//SERVER/shared_data/Technical/Label Sign Off Sheets/sign off project/Signed/'+ os.path.basename(self.p).strip('- to sign.jpg') +' jj'+ '.jpg')
                kl = ('//SERVER/shared_data/Technical/Label Sign Off Sheets/sign off project/Signed/'+ os.path.basename(self.p).strip('- to sign.jpg') +' kl'+ '.jpg')
    
                if os.path.exists(ed) and os.path.exists(Nb) or os.path.exists(jj) or os.path.exists(kl):
                    os.remove('//SERVER/shared_data/Technical/Label Sign Off Sheets/sign off project/To sign/' + os.path.basename(self.p))
                else:
                    print("False")
    
    
    
    
    
            self.dataSend = Button(main, text = "Send", command = var_states, state = DISABLED)
            self.dataSend.grid(column = 1, row = 13, sticky = W)
            self.CaptureScreen = Button(main, text = "PrintScreen", command = PrintScreen, state = DISABLED)
            self.CaptureScreen.grid(column = 1, row = 14, sticky = W)
    
    ###################################################################################################################################
                                                            ##Load Image##
    ###################################################################################################################################
            # Create a Tkinter variable
            self.tkvar = StringVar()
    
            # Directory
            self.nonedisplayed = "N/A"
            self.directory = "//SERVER/shared_data/Technical/Label Sign Off Sheets/sign off project/To Sign"
            self.choices = glob.glob(os.path.join(self.directory, "*- to sign.jpg"))
    
    
    
            self.tkvar.set('...To Sign Off...') # set the default option
    
            # Images
            def change_dropdown():
                imgpath = self.tkvar.get()
                img = Image.open(imgpath)
                photo = ImageTk.PhotoImage(img)
                label2.image = photo
                label2.configure(image=photo)
                self.CaptureScreen['state'] = 'normal'
    
    
            #return path value
            self.p = None
            def func(value):
                global p
                self.p = Path(value)
                print(self.p)
    
            #widgets
            self.msg1 = Label(main, text = "Choose here")
            self.msg1.grid(column = 0, row = 0)
            self.popupMenu = OptionMenu(main, self.tkvar, *self.choices, command = func)
            self.popupMenu.grid(row=1, column=0)
            self.display_label = label2 = Label(main, image=None)
            self.display_label.grid(row=2, column=0, rowspan = 500)
            self.open_button = Button(main, text="Open", command=change_dropdown)
            self.open_button.grid(row=502, column=0)
    
    ###################################################################################################################################
                                                            ##TAB 2 - MANUAL##
    ###################################################################################################################################
    
            def manualopen():
                os.startfile('//SERVER/shared_data/Technical/Food Safety & Quality Manual/Section 21 - Process Control/21.LABL.02 - Labelling notes.docx')
    
            self.manualBtn = Button(manual, text= "open doc", command = manualopen)
            self.manualBtn.pack()
    
    
    
    
    if __name__ == '__main__':
        main()

Also, my passwords.txt file looks like this:

    ed:password1
    Nb:rother
    jj:4spaces
    kl:timepass