当用户名是hello,密码是world时,为什么框架没有被隐藏(忘记)
我尝试过 .destroy() ,它仅删除按钮
这是我的代码:
import tkinter as tk
from tkinter import colorchooser, messagebox
class ExpenseTracker(tk.Tk):
def __init__(self):
super().__init__()
self.title("Expense Tracker")
self.geometry("700x700")
self.minsize(700, 700)
self.login = Login(self)
self.mainloop()
class Login(tk.Frame):
def __init__(self, parent):
self.username = tk.StringVar()
self.password = tk.StringVar()
super().__init__(parent)
tk.Label(text="Enter Username:", borderwidth=0).place(relx=0.5, rely=0.36, anchor=tk.CENTER)
tk.Label(text="Enter Password:", borderwidth=0).place(relx=0.5, rely=0.46, anchor=tk.CENTER)
self.change_colour = tk.Button(text="Background Colour", command=self.change_colour)
self.change_colour.place(relx=0.9, rely=0.1, anchor=tk.CENTER)
self.exit_button = tk.Button(text="Exit", command=exit)
self.exit_button.place(relx=0.9, rely=0.05, anchor=tk.CENTER)
self.username_entry = tk.Entry(textvariable=self.username)
self.username_entry.place(relx=0.5, rely=0.4, anchor=tk.CENTER)
self.password_entry = tk.Entry(textvariable=self.password)
self.password_entry.place(relx=0.5, rely=0.5, anchor=tk.CENTER)
self.login_box = tk.Button(self, text="Login", command=self.get_details)
self.login_box.place(relx=0.5, rely=0.55, anchor=tk.CENTER)
self.pack(expand=True, fill=tk.BOTH)
def change_colour(self):
color = colorchooser.askcolor()[1]
self.configure(bg=color)
def get_details(self):
__username = self.username.get()
__password = self.password.get()
if __username == "hello" and __password == "world":
self.grid_forget()
ExpenseTracker()
有人可以帮忙吗,似乎该功能仅指按钮,而不是整个框架?
首先,我添加了
self.login_visible = True
用于跟踪登录框架可见性和构建函数,该函数名为 toggle_login_visibility()
用于切换可见性。之后,我将 self 添加为所有组件的父级。
class ExpenseTracker(tk.Tk):
def __init__(self):
super().__init__()
self.title("Expense Tracker")
self.geometry("700x700")
self.minsize(700, 700)
self.login = Login(self)
self.login_visible = True
self.toggle_login_visibility()
self.mainloop()
def toggle_login_visibility(self):
if self.login_visible:
self.login.pack(expand=True, fill=tk.BOTH)
else:
self.login.pack_forget()
在
Login
类中,我定义了 self.parent = parent
这将有助于切换可见性。
class Login(tk.Frame):
def __init__(self, parent):
self.parent = parent
self.username = tk.StringVar()
self.password = tk.StringVar()
super().__init__(parent)
tk.Label(self,text="Enter Username:", borderwidth=0).place(relx=0.5, rely=0.36, anchor=tk.CENTER)
tk.Label(self,text="Enter Password:", borderwidth=0).place(relx=0.5, rely=0.46, anchor=tk.CENTER)
self.change_colour = tk.Button(self,text="Background Colour", command=self.change_colour)
self.change_colour.place(relx=0.9, rely=0.1, anchor=tk.CENTER)
self.exit_button = tk.Button(self,text="Exit", command=exit)
self.exit_button.place(relx=0.9, rely=0.05, anchor=tk.CENTER)
self.username_entry = tk.Entry(self,textvariable=self.username)
self.username_entry.place(relx=0.5, rely=0.4, anchor=tk.CENTER)
self.password_entry = tk.Entry(self,textvariable=self.password)
self.password_entry.place(relx=0.5, rely=0.5, anchor=tk.CENTER)
self.login_box = tk.Button(self, text="Login", command=self.get_details)
self.login_box.place(relx=0.5, rely=0.55, anchor=tk.CENTER)
def change_colour(self):
color = colorchooser.askcolor()[1]
self.configure(bg=color)
def get_details(self):
__username = self.username.get()
__password = self.password.get()
if __username == "hello" and __password == "world":
self.parent.login_visible = False
self.parent.toggle_login_visibility()
ExpenseTracker()