登录后无法打开新窗口

时间:2015-12-06 12:58:44

标签: python tkinter

我为哈希工具实现了一个登录窗口,但问题是我希望它被编程,这样当我点击提交按钮时,它会自动将我重定向到哈希工具窗口。现在,我必须关闭它的登录页面才能重定向到另一个窗口。

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

1 个答案:

答案 0 :(得分:1)

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

def reveal(self):
    content = self.password.get()
    if content == "password":
        root.destroy()  # <---
    else:
        message = "denied"
        self.text.insert(0.0,message)

更新除非输入正确的密码,否则请阻止散列窗口访问。

添加属性以检查身份验证是否已完成:

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

...