你能帮我找到错误吗?

时间:2015-01-20 02:21:55

标签: python tkinter python-3.4

我期望这段代码的作用是获取文件或简单消息的哈希代码并将其导出到“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()for 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()

编辑:错误是愚蠢的,所以我认为这个问题已经结束了。感谢所有帮助过我的人

1 个答案:

答案 0 :(得分:2)

你得到的错误是因为parte4():

   frame3=Frame(ventana)
   frame.pack() #<---- this should be frame3.pack()

通过此更改,代码将执行。然而,它是否真的能够做你想做的事情,可能是另一个问题的主题。

P.S。 还可以阅读有关类和self的内容。不需要一直使用global来在类的方法之间共享变量。使用self,例如

self.frame3=Frame(ventana)
self.frame3.pack()