我为哈希工具实现了一个登录窗口,但问题是我希望它被编程,这样当我点击提交按钮时,它会自动将我重定向到哈希工具窗口。现在,我必须关闭它的登录页面才能重定向到另一个窗口。
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()
答案 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() # <---
...