尝试使用一个函数来销毁在另一个函数中创建的tkinter帧。未成功

2024-09-26 22:07:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python编程非常陌生,我一直无法找到如何让它正常工作。在加载主清单框架之前,我使用框架来显示登录屏幕。我打算记录每个用户对清单的更改,因此这是程序正常运行所必需的

程序调用Loginscreen()LoginFrameGenerate()函数来生成顶部菜单和包含标签和输入字段的框架(使用Tkinter) 一旦按下“登录”按钮,就会调用loginfun()函数。 loginfun()函数应该使用if语句来检查用户名和密码,如果它们是正确的,则删除登录屏幕框。删除登录屏幕框架后,将调用大型机和菜单功能

不幸的是,当使用destroy()命令时,登录屏幕框架不会消失。我不能向前走,除非我能让这个工作。任何指导都将不胜感激

我在没有重新初始化loginfun()函数中的框架的情况下尝试了该函数,但是它生成了一个名称错误。我不再得到名称错误,但帧不会被破坏。我在google和stack overflow上搜索了几个小时,唯一能找到的关于Tkinterdestroy()的东西就是类的引用。我开始觉得我把这个编码错了,我应该把每一帧都变成一个单独的类

from tkinter import *
import tkinter.messagebox
import sys

root = Tk()
root.iconbitmap('Favicon.ico')
testusername = "Admin"
testpassword = "Pass"
CurrentUser = StringVar()
Pass = StringVar()
root.state("zoomed")

def Exitbtnclick():
    sys.exit(0)

def logout():
    MainFrame=Frame(root)
    MainFrame.destroy()
    loginScreen
    loginFrameGenerate

def loginScreen():
    loginMenu = Menu(root)
    root.configure(menu=loginMenu)
    FileMenu=Menu(loginMenu)
    loginMenu.add_cascade(label="File", menu=FileMenu)
    FileMenu.add_cascade(label="Exit",command=Exitbtnclick)

def loginFrameGenerate():
#THIS CREATES THE LOGIN FRAME
    logframe = Frame(root)
    logframe.grid()

    UL = Label(logframe, text="Username:", font="Arial 10 bold")
    UL.grid(row=0, column=0, sticky="E")
    UE = Entry(logframe, textvariable=CurrentUser)
    UE.grid(row=0,column=1)
    PL = Label(logframe, text="Password:", font="Arial 10 bold")
    PL.grid(row=1, column=0, sticky="E")
    PE = Entry(logframe, textvariable=Pass)
    PE.grid(row=1,column=1)
    loginbtn = Button(logframe, text="Log In", command=loginfun)
    loginbtn.grid(row=3,columnspan=2)

def loginfun():
#THIS FUNCTION IS CALLED WHEN THE "LOG IN" BUTTON IS PRESSED
    global testusername
    global testpassword
    logframe = Frame(root)   

    if (CurrentUser.get() == testusername) and (Pass.get() == testpassword):
        logframe.destroy() #THIS IS THE PART THAT DOES NOT WORK
        initializeMainMenu
        initializeMainFrame
    else:
        tkinter.messagebox.showinfo("Error!", "Invalid Username/Password")
        return

def initializeMainMenu():
    mainMenu = Menu(root)
    root.configure(menu=mainMenu)
    FileMenu = Menu(mainMenu)
    UserMenu = Menu(mainMenu)
    ItemsMenu = Menu(mainMenu)
    ReportMenu = Menu(mainMenu)
    mainMenu.add_cascade(label="File", menu=FileMenu)
    mainMenu.add_cascade(label="Users", menu=UserMenu)
    mainMenu.add_cascade(label="Items", menu=ItemsMenu)
    mainMenu.add_cascade(label="Reports", menu=ReportMenu)
    FileMenu.add_separator()
    FileMenu.add_command(label="Log Out/Switch User", command=logout)
    FileMenu.add_command(label="Exit", command=Exitbtnclick)
    UserMenu.add_command(label="Add/Remove Users",command=random)

def initializeMainFrame():
    ##Main Inventory Screen To Be Filled in once the user is logged in
       MainFrame = Frame(root)
    MainFrame.grid()

loginScreen()
loginFrameGenerate()


root.mainloop()


Tags: 函数框架adddefrootlabelcommandgrid

热门问题