Python 在不同类别中销毁tkinter屏幕

Python 在不同类别中销毁tkinter屏幕,python,oop,tkinter,Python,Oop,Tkinter,在我的程序中,一旦用户登录,就会打开一个新类,在该类中加载一个函数以检查用户详细信息是否正确,然后继续关闭登录窗口,显示错误消息,然后重新加载页面。如果用户成功登录,则登录屏幕关闭,程序继续。但是,我无法关闭在主类中打开的窗口,但我可以在其他类中打开窗口。我怎样才能在教师课堂上关闭登录屏幕 class Main: def __init__(self, screen): self._frame = None self.username = StringVa

在我的程序中,一旦用户登录,就会打开一个新类,在该类中加载一个函数以检查用户详细信息是否正确,然后继续关闭登录窗口,显示错误消息,然后重新加载页面。如果用户成功登录,则登录屏幕关闭,程序继续。但是,我无法关闭在主类中打开的窗口,但我可以在其他类中打开窗口。我怎样才能在教师课堂上关闭登录屏幕

class Main:

    def __init__(self, screen):
        self._frame = None
        self.username = StringVar()
        self.password = StringVar()
        self.var_FName = StringVar()
        self.var_SName = StringVar()
        self.var_password1 = StringVar()
        self.var_usertype = StringVar()
        self.UserID = StringVar()



    def Main_menu(self):
        screen.geometry("300x250")
        screen.title("Manager of stuff")
        Label(screen, text = "Login Menu", bg = "light blue", width = "300", font = ('',35),pady = 10).pack()
        Label(text = "").pack()
        Button(text = "Login", height = "2", width = "30", command = self.login).pack()
        Label(text = "").pack()
        Button(text = "Register",height = "2", width = "30", command = self.register).pack()

    def login(self):
        login = Toplevel(screen) #this is the screen im trying to close
        login.title("Login")
        login.geometry("500x450")

        Label(login, text = "Please enter your username and password below: ").pack()
        Label(login, text = "").pack()
        Label(login, text = "Username: ").pack()
        Entry(login, textvariable = self.username).pack()
        Label(login, text = "").pack()
        Label(login, text = "Password: ").pack()
        Entry(login, textvariable = self.password, show= "*").pack()
        Label(login, text = "").pack()
        Button(login, text = "Login As a Teacher", width = 20, height = 3, command = lambda : Teacher.LoginFunc(self)).pack()
        Label(login, text = "").pack()
        Button(login, text = "Login As a Student", width = 20, height = 3, command = lambda : Student.LoginFunc(self)).pack()
        Label(login, text = "").pack()
        Button(login, text = "Back", width = 30, height = 4, command = lambda : login.destroy()).pack()
        login.mainloop()
class Teacher (Main):
  def __init__(self, screen):
    self._frame = None

  def LoginFunc(self):
        while True:
            with sqlite3.connect('MyComputerScience.db') as db:
                cursor = db.cursor()
            find_user = ("SELECT * FROM users WHERE username = ? AND password = ? AND usertype = 'Teacher'")
            cursor.execute(find_user, (self.username.get(), self.password.get()))
            results = cursor.fetchall()
            if results:
                for i in results:
                    #Label(Main.login, text = "Log-in successful!", fg = "GREEN", font = "Calibri").pack()
                    Teacher.teachmain(self)

            else:
                Main.logindestroy(self, login)
                ms.showerror("Error", "Incorrect Details")
                Main.login(self)  
            break

因此,您的目标是在用户凭据正确时关闭登录窗口?同时关闭整个顶级,如果详细信息不正确,也只关闭登录页面