Python Can';登录后不要打开新窗口
我为我的散列工具实现了一个登录窗口,但问题是我想对它进行编程,这样当我单击submit按钮时,它会自动将我重定向到散列工具窗口。现在,我必须关闭登录页面,它才能重定向到另一个窗口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
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() # <---
...