将.py文件移动到另一个文件夹,现在只在新文件夹中获取TKinter错误

时间:2016-07-05 16:41:41

标签: python tkinter

我正在尝试使用Python自动化一些分析过程。目前,我有一个程序只能通过它所在的目录,计算CSV和XLSX文档的数量,并提示用户输入他/她想用来加密它们的密码。实际加密将由我尚未下载的库完成,但在确保文件有效的同时,我将其移动到另一个文件夹并出现新错误我不知道如何解析

这是该计划:

#import pyminizip - lib to download later

import tkinter

from tkinter import messagebox

import os

class whatisthepassword:

    def __init__ (self):

        self.root = tkinter.Tk()

        w = self.root.winfo_screenwidth()

        h = self.root.winfo_screenwidth()

        self.root.geometry("+%d+%d" % ( 200,200) )

        self.root.wm_title("Amir's ZIP & Encrypt shortcut")

        self.frame = tkinter.Frame(self.root)

        self.button_frame = tkinter.Frame(self.root)

        self.pwfield_label = tkinter.Label(self.frame, text = "Password to encrypt files with:", font = 20, width = 25, borderwidth = 2,anchor=tkinter.W)

        self.pwfield = tkinter.Entry(self.frame ,font=20, width = 25, relief = "groove", borderwidth = 2)

        self.begin=tkinter.Button(self.button_frame, text='ZIP & Encrypt', font=20, width=50, command = lambda: self.getpw())

        self.pwfield_label.grid(row=0, column = 0)

        self.pwfield.grid(row = 0, column = 1)  

        self.begin.grid()

        self.frame.pack()

        self.button_frame.pack()

        self.root.mainloop()

    def getpw(self):

        while True:

            pw = (self.pwfield.get())

            if pw == '':

                messagebox.showinfo("Uh oh", "Please enter a password")

                break

            else:

                zipcrypt(pw)

                self.root.destroy()



def zipcrypt(pw):

    folder = os.listdir(os.getcwd())

    numcsvs = 0 # number of csvs

    numxlsx = 0

    for file in folder:

            if '.csv' in file:

                numcsvs += 1

            if '.xlsx' in file:

                numxlsx += 1

    if numcsvs > 1:

        messagebox.showinfo("The Double Do", "You are about to \n\n- ZIP and Encrypt %d .csv file(s) \n- Password Protect %d .xlsx file(s)  \n\nUsing the passphrase \'%s\'\n\nContinue?" % (numcsvs, numxlsx, pw))

def main():

    passwordbox = whatisthepassword()

main()

这是错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\aj180\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 1549, in __call__
    return self.func(*args)
  File "C:\Users\aj180\Documents\To Automate\To Automate\create_new_password_zip_folder.py", line 39, in <lambda>
    self.begin=tkinter.Button(self.button_frame, text='ZIP & Encrypt', font=20, width=50, command = lambda: self.getpw())
  File "C:\Users\aj180\Documents\To Automate\To Automate\create_new_password_zip_folder.py", line 57, in getpw
    pw = (self.pwfield.get())
  File "C:\Users\aj180\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 2521, in get
    return self.tk.call(self._w, 'get')
_tkinter.TclError: invalid command name ".49912240.49912368"

我通常在最后两行中得到不同的十进制值。 移动文件时文件会改变吗?这个错误是什么意思?

此外,有更好的方法来格式化我的代码吗?

谢谢你们。

1 个答案:

答案 0 :(得分:1)

由于它周围有while True循环 - 你得到pwfield的内容,如果他们很好,你会去else,在你的else中,你会摧毁根,并延伸所有的孩子。十进制值是Tcl的小部件标识符,并且由于您销毁了小部件,因此不再是可行的命令。

老实说,这个循环完全无关紧要(避免在GUI应用程序中以不惜一切代价的True循环,因为它们会阻止GUI更新,使其无响应),如果if成功则它会终止循环以及何时if失败会导致严重错误。