试图使用一个函数销毁在另一个函数中创建的tkinter框架。不成功

时间:2019-08-28 22:13:29

标签: python tkinter

我是python编程的新手,我一直无法找到如何使其正常运行的方法。在加载主要广告资源框架之前,我正在使用框架显示登录屏幕。我打算记录每个用户的库存变化,因此这对于程序正常运行是必要的。

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

不幸的是,使用destroy()命令时,登录屏幕框架不会消失。我无法前进,直到我能解决这个问题。任何指导将不胜感激。

我尝试了该函数,但没有重新初始化loginfun()函数内部的框架,但是会产生名称错误。我不再遇到名称错误,但是框架没有被破坏。我已经搜索了Google和堆栈溢出达数小时之久,而关于Tkinter destroy()我唯一能找到的是关于类的引用。我开始认为我一直在编码错误,应该将每个帧都设为一个单独的类。

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()

0 个答案:

没有答案