你能帮我找出错误吗?
Can you help me to find the error?
我希望这段代码做的是获取文件或简单消息的哈希码并将其导出到 "txt" 文件。我必须告诉你,这是我第一次用 类 编写代码,所以我可能会犯一些错误。
我已经编写了以下代码,但是当我尝试 运行 它时,出现了以下错误:
File "C:\Python34\lib\tkinter\__init__.py", line 1974, in pack_configure + self._options(cnf, kw))_tkinter.TclError: bad window path name ".45457360"
我已经尝试了几个小时,我注意到的是,将 frameX.destroy() 更改为 frameX.pack_forget() 让我可以 运行 gui 直到 parte2,就像gui 从头开始重新启动,但代码继续。是的,这有点奇怪,所以我不能很好地解释它。
拜托,如果这个问题已经在另一个问题中得到了回答,请只回答但不要举报我。问题是我找不到问题的原因,所以我找不到解决方案。
谢谢大家。
from tkinter.filedialog import *
import hashlib
class programa:
#------------------------------------------
def parte1(self):
global frame
frame=Frame(ventana)
frame.pack()
Button(frame,text="Archivo",command=self.parte2_archivo).grid(row=0,column=0)
Button(frame,text="Mensaje",command=self.parte2_mensaje).grid(row=0,column=1)
ventana.mainloop()
def parte2_archivo(self):
frame.destroy()
global Arch_to_HASH
Arch_to_HASH=askopenfilename()
Arch_to_HASH=open(Arch_to_HASH,"rb").read()
self.parte4()
def parte2_mensaje(self):
frame.destroy()
global frame2
frame2=Frame(ventana)
frame2.pack()
Entry(frame2,textvariable=Men_to_HASH).pack()
Button(frame2,text="Siguiente",command=self.parte3).pack()
def parte3(self):
frame2.destroy()
obj=Men_to_HASH.get()
obj=obj.encode()
self.parte4()
def parte4(self):
global frame3
global listbox
frame3=Frame(ventana)
frame3.pack()
listbox=Listbox(frame3)
listbox.insert(END,"md5") #0
listbox.insert(END,"sha1") #1
listbox.insert(END,"sha224") #2
listbox.insert(END,"sha256") #3
listbox.insert(END,"sha384") #4
listbox.insert(END,"sha512") #5
Button(frame3,text="Siguiente",command=self.parte5)
def parte5(self):
if (listbox.curselection()==0):
opcion="md5"
elif (listbox.curselection()==1):
opcion="sha1"
elif (listbox.curselection()==2):
opcion="sha224"
elif (listbox.curselection()==3):
opcion="sha256"
elif (listbox.curselection()==4):
opcion="sha384"
elif (listbox.curselection()==5):
opcion="sha512"
else:
pass
hash=hashlib.new(opcion,obj).hexdigest()
open("hash.txt","w").write(hash)
#----------------------------------------------------------------------------------
def __init__(self):
global ventana
global Men_to_HASH
ventana=Tk()
Men_to_HASH=StringVar()
self.parte1()
programa()
编辑:这个错误是愚蠢的,所以我认为这个问题已经结束。感谢所有帮助过我的人
你得到的错误是因为 parte4():
frame3=Frame(ventana)
frame.pack() #<---- this should be frame3.pack()
进行此更改后,代码将执行。然而,它是否真的按照你的意愿去做,可能是另一个问题的话题。
p.s。
另请阅读 classes 和 self
。不需要一直使用 global
来在 class 的方法之间共享变量。使用 self
,例如
self.frame3=Frame(ventana)
self.frame3.pack()
我希望这段代码做的是获取文件或简单消息的哈希码并将其导出到 "txt" 文件。我必须告诉你,这是我第一次用 类 编写代码,所以我可能会犯一些错误。
我已经编写了以下代码,但是当我尝试 运行 它时,出现了以下错误:
File "C:\Python34\lib\tkinter\__init__.py", line 1974, in pack_configure + self._options(cnf, kw))_tkinter.TclError: bad window path name ".45457360"
我已经尝试了几个小时,我注意到的是,将 frameX.destroy() 更改为 frameX.pack_forget() 让我可以 运行 gui 直到 parte2,就像gui 从头开始重新启动,但代码继续。是的,这有点奇怪,所以我不能很好地解释它。
拜托,如果这个问题已经在另一个问题中得到了回答,请只回答但不要举报我。问题是我找不到问题的原因,所以我找不到解决方案。 谢谢大家。
from tkinter.filedialog import *
import hashlib
class programa:
#------------------------------------------
def parte1(self):
global frame
frame=Frame(ventana)
frame.pack()
Button(frame,text="Archivo",command=self.parte2_archivo).grid(row=0,column=0)
Button(frame,text="Mensaje",command=self.parte2_mensaje).grid(row=0,column=1)
ventana.mainloop()
def parte2_archivo(self):
frame.destroy()
global Arch_to_HASH
Arch_to_HASH=askopenfilename()
Arch_to_HASH=open(Arch_to_HASH,"rb").read()
self.parte4()
def parte2_mensaje(self):
frame.destroy()
global frame2
frame2=Frame(ventana)
frame2.pack()
Entry(frame2,textvariable=Men_to_HASH).pack()
Button(frame2,text="Siguiente",command=self.parte3).pack()
def parte3(self):
frame2.destroy()
obj=Men_to_HASH.get()
obj=obj.encode()
self.parte4()
def parte4(self):
global frame3
global listbox
frame3=Frame(ventana)
frame3.pack()
listbox=Listbox(frame3)
listbox.insert(END,"md5") #0
listbox.insert(END,"sha1") #1
listbox.insert(END,"sha224") #2
listbox.insert(END,"sha256") #3
listbox.insert(END,"sha384") #4
listbox.insert(END,"sha512") #5
Button(frame3,text="Siguiente",command=self.parte5)
def parte5(self):
if (listbox.curselection()==0):
opcion="md5"
elif (listbox.curselection()==1):
opcion="sha1"
elif (listbox.curselection()==2):
opcion="sha224"
elif (listbox.curselection()==3):
opcion="sha256"
elif (listbox.curselection()==4):
opcion="sha384"
elif (listbox.curselection()==5):
opcion="sha512"
else:
pass
hash=hashlib.new(opcion,obj).hexdigest()
open("hash.txt","w").write(hash)
#----------------------------------------------------------------------------------
def __init__(self):
global ventana
global Men_to_HASH
ventana=Tk()
Men_to_HASH=StringVar()
self.parte1()
programa()
编辑:这个错误是愚蠢的,所以我认为这个问题已经结束。感谢所有帮助过我的人
你得到的错误是因为 parte4():
frame3=Frame(ventana)
frame.pack() #<---- this should be frame3.pack()
进行此更改后,代码将执行。然而,它是否真的按照你的意愿去做,可能是另一个问题的话题。
p.s。
另请阅读 classes 和 self
。不需要一直使用 global
来在 class 的方法之间共享变量。使用 self
,例如
self.frame3=Frame(ventana)
self.frame3.pack()