为什么 tkinter 框架没有被隐藏?

问题描述 投票:0回答:1

当用户名是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()

有人可以帮忙吗,似乎该功能仅指按钮,而不是整个框架?

python tkinter
1个回答
0
投票

首先,我添加了

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()
© www.soinside.com 2019 - 2024. All rights reserved.