打开新窗口时如何关闭上一个和当前窗口

时间:2021-04-28 09:10:36

标签: python oop tkinter

你们能帮帮我吗,如果我打开仪表板窗口,我该如何关闭其他窗口,因为当我使用 self.master.destroy() 时,它会破坏当前窗口和我当前打开的窗口。 从 tkinter 导入 * 从 tkinter 导入消息框 从 tkinter.font 导入字体 从 PIL 导入 ImageTk, Image 导入 mysql.connector 从子进程导入调用

 def main():
     root = Tk()
     startpage = StartPage(root)
     root.mainloop()

类起始页:

#-----------------> ATTRIBUTES <------------------#

def __init__(self, master):
    self.master = master 
    self.master.title("COVID-19 TRACKER")
    self.master.resizable(False, False)
    self.master.geometry('400x600+460+50')
    self.master.iconbitmap('Images/covid19-logo.ico')
    self.frame = Frame(self.master)
    self.frame.pack()

    #------------> BACKGROUND IMAGE <--------------#

    startpage_bg_image = PhotoImage(file='Images/covid19-bg.png')
    self.startpage_bg = startpage_bg = Label(self.frame, image=startpage_bg_image)
    startpage_bg.user_bg_image = startpage_bg_image
    startpage_bg.pack()

    #-----------------> BUTTONS <------------------#

    self.user_btn = Button(self.frame, 
        text="USER",
        height=2,
        width=22,
        relief=RIDGE,
        bg="ORANGE",
        command=self.open_loginUser
        ).place(x=113, y=270)

    self.admin_btn = Button(self.frame, 
        text="ADMIN",
        height=2,
        width=22,
        relief=RIDGE,
        bg="ORANGE",
        command=self.open_loginAdmin
        ).place(x=113, y=325)

    self.registration_btn = Button(self.frame, 
        text="REGISTER",
        height=1,
        width=17,
        relief=RIDGE,
        bg="ORANGE",
        command=self.open_registration
        ).place(x=131, y=380)

    self.about_btn = Button(self.frame, 
        text="ABOUT",
        height=1,
        width=13,
        relief=RIDGE,
        bg="ORANGE",
        command=self.open_about
        ).place(x=290, y=565)

#-----------------> METHODS <------------------#

#Open Login User
def open_loginUser(self):
    self.user_login = Toplevel(self.master)
    self.startpage = UserLogin(self.user_login)

#Open Login Admin
def open_loginAdmin(self):
    self.admin_login = Toplevel(self.master)
    self.startpage = AdminLogin(self.admin_login)

#Open Registration Form 
def open_registration(self):
    self.registration_form = Toplevel(self.master)
    self.startpage = Registration(self.registration_form)

#Open About Form
def open_about(self):
    self.about_win = Toplevel(self.master)
    self.startpage = About(self.about_win)

用户登录表单

类用户登录:

#-----------------> ATTRIBUTES <------------------#

def __init__(self, master):
    self.master = master 
    self.master.title("Sign In As User")
    self.master.resizable(False, False)
    self.master.geometry('300x120+510+290')
    self.master.iconbitmap('Images/covid19-logo.ico')
    self.frame = Frame(self.master)
    self.frame.pack()

    #------------> BACKGROUND IMAGE <--------------#

    startpage_bg_image = PhotoImage(file='Images/user_login_form.png')
    self.startpage_bg = startpage_bg = Label(self.frame, image=startpage_bg_image)
    startpage_bg.user_bg_image = startpage_bg_image
    startpage_bg.pack()

    #-----------------> BUTTONS <------------------#

    self.login_btn = Button(self.frame, 
        text="LOGIN", 
        width=39,
        command=self.check_UserPass,
        bg="black",
        fg="white",
        borderwidth=1,
        relief=RIDGE,
        ).place(x=10, y=85)

    #-------------------> ENTRY <-------------------# 

    # Declaring the entry variable as global 
    # To access it to the check_UserPass method
    global varUsernameUser
    global varPasswordUser
    
    # Setting the entered elements as string
    varUsernameUser = StringVar()
    varPasswordUser= StringVar()

    self.username_entry = Entry(self.frame,
        textvariable = varUsernameUser,
        width=30,
        borderwidth=0,
        bg="black",
        fg="white",
        insertbackground="white"
        ).place(x=100, y=13)

    self.password_entry = Entry(self.frame,
        textvariable = varPasswordUser,
        width=30, 
        borderwidth=0,
        show = '*',
        bg="black",
        fg="white",
        insertbackground="white",
        ).place(x=100, y=53)

#Check Admin's Username and Password 
def check_UserPass(self):
    # Calling database
    try: 
        db = mysql.connector.connect(host="localhost", user="root", password="root", database="COVID19_USER_DATABASE")
    except: 
        print("You are not connected to server")
    else:
        print("Conected Successfully")

        mycursor = db.cursor()

        checkUsername = varUsernameUser.get()
        checkPassword = varPasswordUser.get()

        query = "SELECT username, password FROM COVID19_USER_RECORDS"
        mycursor.execute(query)

        #Looping the username and password from database and checks if it's equal
        for (username_x, password_y) in mycursor: 
            if checkUsername == username_x and checkPassword == password_y:
                print("Success")
                break
        else:
            print("Wrong Input")
            self.open_popupwronginput()

        db.close()
        call (["python", "user_dashboard.py"])
# Pop Up: Wrong Input 
def open_popupwronginput(self):
    self.popup = Toplevel(self.master)
    self.startpage = PopUpWrongInput(self.popup)

# Open User Dashboard 
def open_userdashboard(self):
    self.user_dashboard = Toplevel(self.master)
    self.startpage = UserDashboard(self.user_dashboard)

用户登录表单

类AdminLogin: def init(self, master): self.master = 主人 self.master.title("以管理员身份登录") self.master.resizable(假,假) self.master.geometry('300x120+510+290') self.master.iconbitmap('Images/covid19-logo.ico') self.frame = Frame(self.master) self.frame.pack()

    #------------> BACKGROUND IMAGE <--------------#

    startpage_bg_image = PhotoImage(file='Images/user_login_form.png')
    self.startpage_bg = startpage_bg = Label(self.frame, image=startpage_bg_image)
    startpage_bg.user_bg_image = startpage_bg_image
    startpage_bg.pack()

    #-----------------> BUTTONS <------------------#
    self.login_btn = Button(self.frame, 
        text="LOGIN", 
        width=39,
        command=self.check_UserPass,
        bg="black",
        fg="white",
        borderwidth=1,
        relief=RIDGE,
        ).place(x=10, y=85)

    #-------------------> ENTRY <-------------------# 

    # Declaring the entry variable as global 
    # To access it to the check_UserPass method
    global varUsernameAdmin
    global varPasswordAdmin
    
    # Setting the entered elements as string
    varUsernameAdmin = StringVar()
    varPasswordAdmin = StringVar()

    self.username_entry = Entry(self.frame,
        textvariable = varUsernameAdmin,
        width=30,
        borderwidth=0,
        bg="black",
        fg="white",
        insertbackground="white"
        ).place(x=100, y=13)

    self.password_entry = Entry(self.frame,
        textvariable = varPasswordAdmin,
        width=30, 
        borderwidth=0,
        show = '*',
        bg="black",
        fg="white",
        insertbackground="white",
        ).place(x=100, y=53)

# Check Username and Password on database
# Username: covid19
# Password: covid19
def check_UserPass(self):
    username = varUsernameAdmin.get()
    password = varPasswordAdmin.get()

    #check admin username and password 
    if username == 'covid19' and password == 'covid19':
        print("Success")
    else:
        self.open_popupwronginput()

    call (["python", "admin_dashboard.py"])

#Opens Admin Dashboard
def open_admindashboard(self):
    self.admin_dashboard = Toplevel(self.master)
    self.startpage = AdminDashboard(self.admin_dashboard)

#Pop up: WrongInput
def open_popupwronginput(self):
    self.popup = Toplevel(self.master)
    self.startpage = PopUpWrongInput(self.popup)

报名表

班级报名: def init(self, master): self.master = 主人 self.master.title("报名表") self.master.resizable(假,假) self.master.geometry('280x318+520+210') self.master.iconbitmap('Images/covid19-logo.ico') self.frame = Frame(self.master) self.frame.pack()

    #------------> BACKGROUND IMAGE <--------------#

    startpage_bg_image = PhotoImage(file='Images/register_form.png')
    self.startpage_bg = startpage_bg = Label(self.frame, image=startpage_bg_image)
    startpage_bg.user_bg_image = startpage_bg_image
    startpage_bg.pack()

    #-----------------> ENTRY <------------------#

    global name_get 
    global age_get 
    global address_get
    global contactno_get 
    global gender_get
    global username_get
    global password_get 

    name_get = StringVar()
    age_get = StringVar()
    address_get = StringVar()
    contactno_get = StringVar()
    gender_get = StringVar()
    username_get = StringVar()
    password_get = StringVar()

    self.entry_name = Entry(self.frame, 
        width=29, 
        textvariable=name_get,
        borderwidth=0,
        bg="black",
        fg="white",
        insertbackground="white",
        ).place(x=95, y=40)

    self.entry_age = Entry(self.frame, 
        width=29, 
        textvariable=age_get,
        borderwidth=0,
        bg="black",
        fg="white",
        insertbackground="white",
        ).place(x=95, y=70)

    self.entry_address = Entry(self.frame, 
        width=29, 
        textvariable=address_get,
        borderwidth=0,
        bg="black",
        fg="white",
        insertbackground="white",
        ).place(x=95, y=100)

    self.entry_gender= Entry(self.frame, 
        width=29, 
        textvariable=gender_get,
        borderwidth=0,
        bg="black",
        fg="white",
        insertbackground="white",
        ).place(x=95, y=130)

    self.entry_contactno = Entry(self.frame,
        width=29, 
        textvariable=contactno_get,
        borderwidth=0,
        bg="black",
        fg="white",
        insertbackground="white",
        ).place(x=95, y=160)

    self.entry_username = Entry(self.frame, 
        width=29, 
        textvariable=username_get,
        borderwidth=0,
        bg="black",
        fg="white",
        insertbackground="white",
        ).place(x=95, y=220)

    self.entry_password = Entry(self.frame, 
        width=29, 
        textvariable=password_get,
        borderwidth=0,
        bg="black",
        fg="white",
        insertbackground="white",
        ).place(x=95, y=250)

    #-----------------> BUTTONS <------------------#

    self.register_button = Button(self.frame, 
        text="REGISTER", 
        width=35,
        bg="black",
        fg="white",
        borderwidth=1,
        relief=RIDGE,
        command=self.add_to_database
        ).place(x=13, y=280)

def add_to_database(self):
    #check admin username and password 
    try: 
        db = mysql.connector.connect(host="localhost", user="root", password="root", database="COVID19_USER_DATABASE")
    except: 
        print("You are not connected to server")
    else:
        global name
        global age
        global address
        global cotact_no
        global gender
        global username_g 
        global password
        name = name_get.get()
        age = age_get.get()
        address = address_get.get()
        cotact_no = contactno_get.get()
        gender = gender_get.get()
        username_g = username_get.get()
        password = password_get.get()

        if name == "":
            self.open_popupsomething()
        elif address == "":
            self.open_popupsomething()
        elif cotact_no == "":
            self.open_popupsomething()
        elif gender == "":
            self.open_popupsomething()
        elif age == "":
            self.open_popupsomething()
        elif password == "":
            self.open_popupsomething()
        elif username_g == "":
            self.open_popupsomething()
        else: 
            cursor = db.cursor()
            username = username_g
            sql1 = "SELECT * FROM COVID19_USER_RECORDS WHERE username = %s"
            username = (username, )
            result = cursor.execute(sql1, username)
            result = cursor.fetchall()
            if not result:
                self.add_user()
            else:
                print("Username Exist")
                self.open_popupsomething()

def add_user(self):
    try: 
        db = mysql.connector.connect(host="localhost", user="root", password="root", database="COVID19_USER_DATABASE")
    except: 
        print("You are not connected to server")
    else:
        mycursor = db.cursor()
        sql = "INSERT INTO COVID19_USER_RECORDS (name, age, address, cotact_no, gender, username, password) VALUES (%s, %s, %s, %s, %s, %s, %s)"
        value = (name, age, address, cotact_no, gender, username_g, password)
        mycursor.execute(sql, value)
        db.commit()
        print("Added Successfully")
        messagebox.showinfo("Console", "Successfully Added. Click 'Ok' to continue...")
        mycursor.close()
        db.close()

def open_popupsomething(self):
    self.popup = Toplevel(self.master)
    self.startpage = PopUpSomethingMissing(self.popup)

def open_popupcontinue(self):
    self.popup = Toplevel(self.master)
    self.startpage = PopUpContinue(self.popup)

课程简介: def init(self, master): self.master = 主人 self.master.title("关于") self.master.resizable(假,假) self.master.geometry('270x170+520+250') self.master.iconbitmap('Images/covid19-logo.ico') self.frame = Frame(self.master) self.frame.pack()

    #------------> BACKGROUND IMAGE <--------------#

    about_bg_image = PhotoImage(file='Images/about_form.png')
    self.about_bg = about_bg = Label(self.frame, image=about_bg_image)
    about_bg.user_bg_image = about_bg_image
    about_bg.pack(pady=0)

    #-----------------> BUTTONS <------------------#

    self.ok_button = Button(self.frame, 
        text="OK", 
        width=10,
        command=self.click,
        bg="black",
        fg="white",
        borderwidth=1,
        relief=RIDGE,
        ).place(x=180, y=135)

#-----------------> METHODS <------------------#

def click(self):
    self.master.destroy()

类用户仪表板: def init(self, master): self.master = 主人 self.master.title("用户仪表盘") self.master.resizable(假,假) self.master.geometry('1000x600+160+50') self.master.iconbitmap('Images/covid19-logo.ico') self.frame = Frame(self.master) self.frame.pack()

    #------------> BACKGROUND IMAGE <--------------#

def show_info():
    pass

def destroy_windows(self):
    self.popup = Toplevel(self.master)
    self.startpage = PopUpContinue(self.popup)

类管理仪表板: def init(self, master): self.master = 主人 self.master.title("管理仪表盘") self.master.resizable(假,假) self.master.geometry('1000x600+160+50') self.master.iconbitmap('Images/covid19-logo.ico') self.frame = Frame(self.master) self.frame.pack()

    #------------> BACKGROUND IMAGE <--------------#

通知框:缺少某些东西

类 PopUpSomethingMissing: def init(self, master): self.master = 主人 self.master.title("控制台") self.master.resizable(假,假) self.master.geometry('320x123+500+290') self.master.iconbitmap('Images/covid19-logo.ico') self.master.attributes("-topmost", True) self.frame = Frame(self.master) self.frame.pack()

    #------------> BACKGROUND IMAGE <--------------#

    about_bg_image = PhotoImage(file='Images/alert_box.png')
    self.about_bg = about_bg = Label(self.frame, image=about_bg_image)
    about_bg.user_bg_image = about_bg_image
    about_bg.pack()

    #-----------------> BUTTONS <------------------#

    self.ok_button = Button(self.frame, 
        text="OK", 
        width=10,
        command=self.click,
        relief="ridge",
        ).place(x=220, y=87)

    #-----------------> LABELS <------------------#

    self.wronginput = Label(self.frame, 
        text="Something is missing. Please complete the form.",
        bg="#ffffff"
        ).place(x=57, y=29)

def click(self):
    self.master.destroy()

#Notification Box:输入错误 类 PopUpWrongInput: def init(self, master): self.master = 主人 self.master.title("控制台") self.master.resizable(假,假) self.master.geometry('316x123+510+290') self.master.iconbitmap('Images/covid19-logo.ico') self.master.attributes("-topmost", True) self.frame = Frame(self.master) self.frame.pack()

    #------------> BACKGROUND IMAGE <--------------#

    about_bg_image = PhotoImage(file='Images/alert_box.png')
    self.about_bg = about_bg = Label(self.frame, image=about_bg_image)
    about_bg.user_bg_image = about_bg_image
    about_bg.pack()

    #-----------------> BUTTONS <------------------#

    self.ok_button = Button(self.frame, 
        text="OK", 
        width=10,
        command=self.click,
        relief="ridge",
        ).place(x=220, y=87)

    #-----------------> LABELS <------------------#

    self.wronginput = Label(self.frame, 
        text="Wrong input. Please recheck your entered data.",
        bg="#ffffff"
        ).place(x=57, y=29)

#-----------------> METHODS <------------------#

def click(self):
    self.master.destroy()

1 个答案:

答案 0 :(得分:0)

from tkinter import* 
root = Tk()

def open_new_and_destroy():
    top = Tk()

    root.destroy()

btn_destroy_open = Button(root , text ="destroy and open" ,command = open_new_and_destroy).pack()

root.mainloop()


这能解决您的问题吗