Python Can';登录后不要打开新窗口

Python Can';登录后不要打开新窗口,python,tkinter,Python,Tkinter,我为我的散列工具实现了一个登录窗口,但问题是我想对它进行编程,这样当我单击submit按钮时,它会自动将我重定向到散列工具窗口。现在,我必须关闭登录页面,它才能重定向到另一个窗口 import hashlib import Tkinter as tk from tkFileDialog import askopenfilename import sys from Tkinter import * class Start(Frame): def __init__(self,master

我为我的散列工具实现了一个登录窗口,但问题是我想对它进行编程,这样当我单击submit按钮时,它会自动将我重定向到散列工具窗口。现在,我必须关闭登录页面,它才能重定向到另一个窗口

import hashlib
import Tkinter as tk
from tkFileDialog import askopenfilename
import sys
from Tkinter import *

class Start(Frame):

    def __init__(self,master):
        Frame.__init__(self,master)
        self.grid()
        self.create_widgets()



    def create_widgets(self):
        self.instruction = Label(self ,text ="Enter password")
        self.instruction.grid(row = 0,column = 0, columnspan = 2,sticky =W)

        self.password = Entry(self)
        self.password.grid(row = 1, column = 1, sticky = W)

        self.submit_button = Button(self, text = "Submit", command =   self.reveal)
    self.submit_button.grid(row = 2, column = 0, sticky =W)

        self.text = Text(self, width = 35, height = 5, wrap = WORD)
        self.text.grid(row = 3, column = 0, columnspan = 2, sticky = W)

    def reveal(self):
        content = self.password.get()
        if content == "password":
            message = "you have access to something special"

        else:message = "denied"
        self.text.insert(0.0,message)


root = Tk()
root.title("Password")
root.geometry("250x150")
app = Start(root)
root.mainloop()

class Application(object):
    def __init__(self):
        self.root = root = tk.Tk()
        menubar = tk.Menu(root)

        filemenu = tk.Menu(menubar, tearoff=0)
        filemenu.add_command(label="Hash", command=self.hashmd5)
        filemenu.add_command(label="Exit", command=root.quit)

        menubar.add_cascade(label="File", menu=filemenu)
        root.config(menu=menubar)

    #Add a Label to hold the current filename
        self.filename = tk.StringVar()
        self.filename.set("No File Selected")
        lbl = tk.Label(root, textvariable=self.filename, anchor="w")
        lbl.pack()

    #Add a Label to hold the most recent MD5 digest
        self.digest = tk.StringVar()
        lbl = tk.Label(root, textvariable=self.digest, anchor="w")
        lbl.pack()

        root.mainloop()

    def hashmd5(self):
        BLOCKSIZE = 65536
        hasher = hashlib.md5()
        filename = askopenfilename(parent=self.root)
        self.filename.set(filename)
        print(filename)

        with open(filename, 'rb') as afile:
            buf = afile.read(BLOCKSIZE)
            while len(buf) > 0:
                hasher.update(buf)
                buf = afile.read(BLOCKSIZE)
                digest = hasher.hexdigest()
                self.digest.set(digest)
                print(digest)

Application()   

您可以使用
root.destroy
退出第一个主循环:

def reveal(self):
    content = self.password.get()
    if content == "password":
        root.destroy()  # <---
    else:
        message = "denied"
        self.text.insert(0.0,message)
def显示(自身):
content=self.password.get()
如果内容==“密码”:

root.destroy()#谢谢!我发现了一个小错误,用户在关闭登录窗口时仍然可以访问哈希窗口。有什么方法可以阻止这种情况吗?值得注意的是,破坏根窗口,然后在同一个程序中创建一个新窗口是有点不寻常的。GUI通常不是这样设计的。
class Start(Frame):
    def __init__(self, master):
        self.authenticated = False  # <---
        Frame.__init__(self,master)
        self.grid()
        self.create_widgets()

    def create_widgets(self):
        ....

    def reveal(self):
        content = self.password.get()
        if content == "password":
            self.authenticated = True  # <---
            root.destroy()
        else:
            message = "denied"
            self.text.insert(0.0,message)
root = Tk()
root.title("Password")
root.geometry("250x150")
app = Start(root)
root.mainloop()

if not app.authenticated:  # <---
    sys.exit()             # <---

...