我正在尝试使用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"
我通常在最后两行中得到不同的十进制值。 移动文件时文件会改变吗?这个错误是什么意思?
此外,有更好的方法来格式化我的代码吗?
谢谢你们。
答案 0 :(得分:1)
由于它周围有while True
循环 - 你得到pwfield
的内容,如果他们很好,你会去else
,在你的else
中,你会摧毁根,并延伸所有的孩子。十进制值是Tcl的小部件标识符,并且由于您销毁了小部件,因此不再是可行的命令。
老实说,这个循环完全无关紧要(避免在GUI应用程序中以不惜一切代价的True循环,因为它们会阻止GUI更新,使其无响应),如果if成功则它会终止循环以及何时if失败会导致严重错误。