首页 > 解决方案 > 在python 3中按下X windows按钮时如何返回上一个窗口

问题描述

我对 python 很陌生,目前正在学习如何创建登录系统。这样做时,我遇到了一个问题,当按下当前窗口的 x 按钮时,我需要打开前一个窗口。

我试过编辑这个,但是当我把它写成'on_close():'在其他函数上调用它时,它给了我和错误:"NameError: name 'on_close' is not defined"


    def on_close():

         #custom close options, here's one example:

         close = messagebox.askokcancel("Close", "Would you like to close the program?")
         if close:
              root.destroy()

    root.protocol("WM_DELETE_WINDOW",  on_close)

from tkinter import*
from tkinter import messagebox

w = 300
h = 2

def register_user():
    global username_info
    global password_info

    username_info = username.get()
    password_info = password.get()

    file = open(username_info+".txt", "w")
    file.write(username_info)
    file.write(password_info)
    file.close()

    username_entry.delete(0, END)
    password_entry.delete(0, END)

    Label(text = "Registration Success")

def register():
    global screen1
    screen.withdraw()
    screen1 = Toplevel(screen)
    screen1.title("Registration")
    screen1.geometry("300x250")

    global username
    global password
    global username_entry
    global password_entry
    username = StringVar()
    password = StringVar()

    Label(screen1, text = " Please Enter Your Details Below*").pack()
    Label(screen1, text = "").pack()
    Label(screen1, text = "Username *").pack()
    username_entry = Entry(screen1, textvariable = username)
    username_entry.pack()
    Label(screen1, text = "Password *").pack()
    password_entry = Entry(screen1, textvariable = password)
    password_entry.pack()
    Label(screen1, text = "").pack()
    Button(screen1, text= "Register", height="1", width="10", command = register_user).pack()

def login():
    global screen2

    screen.withdraw()
    screen2 = Toplevel(screen)
    screen2.title("HOT or SUPER HOT")
    screen2.geometry("500x400")
    on_close():

def main_Screen():

    global screen

    screen = Tk()
    screen.geometry("600x300")
    screen.title("Login System")

    Label(text = "Login System" , bg = "black", width = w , height = h, font = ("Calibri", 20) , fg = "white").pack()
    Label(text = "").pack()
    Button(text = "Login", height = h, width = "30", command = login).place(x=50 , y=200)
    Label(text = "").pack()
    Button(text = "Register" ,height = h, width = "30", command = register).place(x=320 , y=200)

    screen.mainloop()

main_Screen()

print("Hello World")




def on_close():
    screen2.withdraw()
    screen.update()
    screen.deiconify


screen2.protocol("WM_DELETE_WINDOW", on_close)

解决了感谢您的帮助当我将'添加screen2.protocol("WM_DELETE_WINDOW", on_close)def login()

标签: pythonpython-3.xtkinterwindow

解决方案


您可以通过on_close()预先定义来尝试

from tkinter import*

w = 300
h = 2


def on_close():
    screen2.withdraw()
    screen.update()
    screen.deiconify()


def register_user():
    global username_info
    global password_info

    username_info = username.get()
    password_info = password.get()

    file = open(username_info+".txt", "w")
    file.write(username_info)
    file.write(password_info)
    file.close()

    username_entry.delete(0, END)
    password_entry.delete(0, END)

    Label(text = "Registration Success")


def register():
    global screen1
    screen.withdraw()
    screen1 = Toplevel(screen)
    screen1.title("Registration")
    screen1.geometry("300x250")

    global username
    global password
    global username_entry
    global password_entry
    username = StringVar()
    password = StringVar()

    Label(screen1, text = " Please Enter Your Details Below*").pack()
    Label(screen1, text = "").pack()
    Label(screen1, text = "Username *").pack()
    username_entry = Entry(screen1, textvariable = username)
    username_entry.pack()
    Label(screen1, text = "Password *").pack()
    password_entry = Entry(screen1, textvariable = password)
    password_entry.pack()
    Label(screen1, text = "").pack()
    Button(screen1, text= "Register", height="1", width="10", command = register_user).pack()


def login():
    global screen2

    screen.withdraw()
    screen2 = Toplevel(screen)
    screen2.title("NO IDEA")
    screen2.geometry("500x400")
    on_close()


def main_Screen():

    global screen

    screen = Tk()
    screen.geometry("600x300")
    screen.title("Login System")

    Label(text = "Login System" , bg = "black", width = w , height = h, font = ("Calibri", 20) , fg = "white").pack()
    Label(text = "").pack()
    Button(text = "Login", height = h, width = "30", command = login).place(x=50 , y=200)
    Label(text = "").pack()
    Button(text = "Register" ,height = h, width = "30", command = register).place(x=320 , y=200)

    screen.mainloop()


main_Screen()

print("Hello World")

screen2.protocol("WM_DELETE_WINDOW", on_close)

这可能有助于不给出错误


推荐阅读