python - 在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()
:
解决方案
您可以通过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)
这可能有助于不给出错误
推荐阅读
- r - 使用因子来绘制乱序的日期
- python - 为什么类似集合的对象不支持像 .intersection() 这样的集合方法?
- websocket - 由于从多个 websocket 服务加载错误数据,Goaccess 在实时 HTML 报告中显示错误数据
- html - 使用浏览器链接打开应用程序
- php - 谷歌地图请求被拒绝问题
- asp.net - ASP.NET Core 2 System.MissingMethodException:没有为此对象定义无参数构造函数
- hibernate - 对 Spring 数据中的 embeddedId 进行排序
- visual-studio - Xamarin IO,从 Visual Studio for Windows 连接到 Mac Build Agent 时,私钥已加密但密码为空
- java - 爪哇。忽略/禁用按键功能但仍捕获 keyEvent
- mysql - 分组后如何将计数转换为布尔值