В вашем коде много ошибок.
Если вы уничтожите корневое окно, вы уничтожите также все остальные виджеты.Поэтому вы больше не можете использовать свой метод self.menu.
Вы используете разные менеджеры геометрии, было бы лучше, если вы используете только один.
Вы упаковываете в себя неправильный виджет.Метод меню должен быть self.ml.pack (), а не self.pack ()
Ваш конструктор Gui использует super () без передачи self
from tkinter import *
class Employee:
"""Create an employee"""
def __init__(self, forename, surname):
self.forename = forename
self.surname = surname
self.username = forename[0] + '.' + surname
self.employeeID = 1
def employeeUsername(self):
"""Generates a username using the forename and surname of the employee class"""
return "{}".format(self.username)
class GUI(Frame):
def __init__(self,master):
self.master = master
Frame.__init__(self, self.master) #still confused?
self.pack()
#self.frame = Frame(master) it's pointless variable
self.lu = Label(self,text = "Username: ",fg ="black",bg="white",font=("Courier",13))
self.lp = Label(self,text = "Password: ",fg ="black",bg="white",font=("Courier",13))
self.eu = Entry(self)
self.ep = Entry(self, show="*")
self.lu.grid(row = 0, sticky = E)
self.lp.grid(row = 1, sticky = E)
self.eu.grid(row = 0, column = 1)
self.ep.grid(row = 1, column = 1)
self.log = Button(self,text="Login", command=self.login)
self.log.grid(columnspan = 2)
def menu(self):
print("Y")
self.my_label = Label(self.master, text="Option Menu", fg="black", bg="white") #font=("Courier",13)
self.my_label.pack(side = TOP , fill = X)
def login(self):
'''Login page'''
uname = self.eu.get()
pword = self.ep.get()
if len(uname) < 5 or len(pword) == 0:
self.error = Label(self,text="Incorrect Password",fg ="black",bg="white",font=("Courier",10))
self.error.grid(row = 3 ,column = 1)
else:
#root.destroy()
self.menu()
#or use self.menu2() for creating toplevel window
print("X")
if __name__ == "__main__":
root = Tk()
main = GUI(root)
root.mainloop()
Было бы лучше, если высоздайте окно Toplevel и поместите в него свой self.my_label.
вроде:
def menu2(self):
self.my_toplevel = Toplevel(self.master)
self.my_label = Label(self.my_toplevel, text="Option Menu", fg="black", bg="white") #font=("Courier",13)
self.my_label.pack(side = TOP , fill = X)