怎么获取entry_filename.pack()里面的值
时间: 2023-03-28 21:02:55 浏览: 51
你可以使用Python的zipfile模块来获取entry_filename.pack()里面的值。具体的代码如下:
import zipfile
with zipfile.ZipFile('your_file.zip', 'r') as zip_ref:
for file in zip_ref.infolist():
print(file.filename)
其中,'your_file.zip'是你要解压的文件名,file.filename就是entry_filename.pack()里面的值。
相关问题
帮我写一个记账软件代码,具体要求: 使用类实现数据封装,使用tkinter实现界面UI设计,使用文件保存数据,要有两个文件,一个文件是用户登陆注册功能,另一个文件是实现数据的增加、修改、删除和查询,退出操作。
好的,我可以为您提供一个大致的代码框架,您可以根据自己的实际需求进行修改和完善。
首先,我们需要创建一个类来实现数据的封装。这个类包含账目的日期、类型、金额、备注等信息。代码如下:
```
class Account:
def __init__(self, date, category, amount, note):
self.date = date
self.category = category
self.amount = amount
self.note = note
```
接下来,我们需要使用tkinter来实现界面UI设计。我们可以创建一个登陆、注册界面和一个主界面,主界面上包含账目的增加、修改、删除和查询等功能。代码如下:
```
import tkinter as tk
from tkinter import messagebox
class LoginFrame:
def __init__(self, master):
self.master = master
self.master.title("登陆")
self.master.geometry("300x200")
self.label_username = tk.Label(self.master, text="用户名")
self.label_username.pack()
self.entry_username = tk.Entry(self.master)
self.entry_username.pack()
self.label_password = tk.Label(self.master, text="密码")
self.label_password.pack()
self.entry_password = tk.Entry(self.master, show="*")
self.entry_password.pack()
self.button_login = tk.Button(self.master, text="登陆", command=self._login_btn_clicked)
self.button_login.pack()
self.button_register = tk.Button(self.master, text="注册", command=self._register_btn_clicked)
self.button_register.pack()
def _login_btn_clicked(self):
pass
def _register_btn_clicked(self):
pass
class MainFrame:
def __init__(self, master):
self.master = master
self.master.title("记账软件")
self.master.geometry("800x600")
self.label_date = tk.Label(self.master, text="日期")
self.label_date.pack()
self.entry_date = tk.Entry(self.master)
self.entry_date.pack()
self.label_category = tk.Label(self.master, text="类型")
self.label_category.pack()
self.entry_category = tk.Entry(self.master)
self.entry_category.pack()
self.label_amount = tk.Label(self.master, text="金额")
self.label_amount.pack()
self.entry_amount = tk.Entry(self.master)
self.entry_amount.pack()
self.label_note = tk.Label(self.master, text="备注")
self.label_note.pack()
self.entry_note = tk.Entry(self.master)
self.entry_note.pack()
self.button_add = tk.Button(self.master, text="添加", command=self._add_account)
self.button_add.pack()
self.button_modify = tk.Button(self.master, text="修改", command=self._modify_account)
self.button_modify.pack()
self.button_delete = tk.Button(self.master, text="删除", command=self._delete_account)
self.button_delete.pack()
self.button_query = tk.Button(self.master, text="查询", command=self._query_account)
self.button_query.pack()
self.button_exit = tk.Button(self.master, text="退出", command=self._exit)
self.button_exit.pack()
def _add_account(self):
pass
def _modify_account(self):
pass
def _delete_account(self):
pass
def _query_account(self):
pass
def _exit(self):
pass
if __name__ == '__main__':
root = tk.Tk()
app = LoginFrame(root)
root.mainloop()
```
接下来,我们需要使用文件保存数据。我们可以创建两个文件,一个用来保存用户的登陆信息,另一个用来保存账目信息。代码如下:
```
import json
class UserDB:
def __init__(self, filename):
self.filename = filename
self._users = {}
self._load()
def _load(self):
try:
with open(self.filename, 'r') as f:
self._users = json.load(f)
except FileNotFoundError:
pass
def _save(self):
with open(self.filename, 'w') as f:
json.dump(self._users, f)
def get(self, username):
return self._users.get(username)
def add(self, username, password):
if username in self._users:
raise ValueError("用户名已存在")
self._users[username] = password
self._save()
class AccountDB:
def __init__(self, filename):
self.filename = filename
self._accounts = []
self._load()
def _load(self):
try:
with open(self.filename, 'r') as f:
self._accounts = json.load(f)
except FileNotFoundError:
pass
def _save(self):
with open(self.filename, 'w') as f:
json.dump(self._accounts, f)
def add(self, account):
self._accounts.append(account)
self._save()
def modify(self, index, account):
self._accounts[index] = account
self._save()
def delete(self, index):
del self._accounts[index]
self._save()
def query(self, start_date, end_date):
return [account for account in self._accounts if start_date <= account.date <= end_date]
```
最后,我们需要在登陆、注册界面和主界面中添加相应的功能代码。代码如下:
```
class LoginFrame:
def __init__(self, master):
self.master = master
self.master.title("登陆")
self.master.geometry("300x200")
self.label_username = tk.Label(self.master, text="用户名")
self.label_username.pack()
self.entry_username = tk.Entry(self.master)
self.entry_username.pack()
self.label_password = tk.Label(self.master, text="密码")
self.label_password.pack()
self.entry_password = tk.Entry(self.master, show="*")
self.entry_password.pack()
self.button_login = tk.Button(self.master, text="登陆", command=self._login_btn_clicked)
self.button_login.pack()
self.button_register = tk.Button(self.master, text="注册", command=self._register_btn_clicked)
self.button_register.pack()
self.user_db = UserDB("users.json")
def _login_btn_clicked(self):
username = self.entry_username.get()
password = self.entry_password.get()
if self.user_db.get(username) == password:
self.master.destroy()
root = tk.Tk()
app = MainFrame(root)
root.mainloop()
else:
messagebox.showwarning("警告", "用户名或密码错误")
def _register_btn_clicked(self):
username = self.entry_username.get()
password = self.entry_password.get()
try:
self.user_db.add(username, password)
messagebox.showinfo("提示", "注册成功")
except ValueError:
messagebox.showwarning("警告", "用户名已存在")
class MainFrame:
def __init__(self, master):
self.master = master
self.master.title("记账软件")
self.master.geometry("800x600")
self.label_date = tk.Label(self.master, text="日期")
self.label_date.pack()
self.entry_date = tk.Entry(self.master)
self.entry_date.pack()
self.label_category = tk.Label(self.master, text="类型")
self.label_category.pack()
self.entry_category = tk.Entry(self.master)
self.entry_category.pack()
self.label_amount = tk.Label(self.master, text="金额")
self.label_amount.pack()
self.entry_amount = tk.Entry(self.master)
self.entry_amount.pack()
self.label_note = tk.Label(self.master, text="备注")
self.label_note.pack()
self.entry_note = tk.Entry(self.master)
self.entry_note.pack()
self.button_add = tk.Button(self.master, text="添加", command=self._add_account)
self.button_add.pack()
self.button_modify = tk.Button(self.master, text="修改", command=self._modify_account)
self.button_modify.pack()
self.button_delete = tk.Button(self.master, text="删除", command=self._delete_account)
self.button_delete.pack()
self.button_query = tk.Button(self.master, text="查询", command=self._query_account)
self.button_query.pack()
self.button_exit = tk.Button(self.master, text="退出", command=self._exit)
self.button_exit.pack()
self.account_db = AccountDB("accounts.json")
def _add_account(self):
date = self.entry_date.get()
category = self.entry_category.get()
amount = self.entry_amount.get()
note = self.entry_note.get()
account = Account(date, category, amount, note)
self.account_db.add(account)
messagebox.showinfo("提示", "添加成功")
def _modify_account(self):
pass
def _delete_account(self):
pass
def _query_account(self):
start_date = self.entry_date.get()
end_date = self.entry_category.get()
accounts = self.account_db.query(start_date, end_date)
messagebox.showinfo("查询结果", accounts)
def _exit(self):
self.master.destroy()
```
这就是一个基本的记账软件代码框架,您可以根据自己的实际需求进行修改和完善。
使用Python完成,并给出详细代码:密码管理工具 1.文件操作:打开、保存密码库; 2.密码库中所有密码数据对称加密后存储(AES),密码库打开时提示输入密码,输入正确密码才能打开(同时对加密的数据进行解密); 3.密码库中保存的每一条数据包括多个部分,例如名称、URL、Email、文本、银行帐号、电话手机等各种号码、用户名以及密码等; 4.每条数据有不同的类型,例如登录账号、银行卡、文本、地址等,不同的类型有不同的数据内容需要填写; 根据密码生成设定,例如长度、是否包含大小写字母/数字/符号、至少包含一个大写字母、至少包含一个特殊符号等,生成密码; 5.快速查找:可以根据名称、登录名、URL、说明等进行查找。 6.使用简单的图形界面
好的,以下是一个基于Python实现的密码管理工具,包含了文件操作、密码加密、数据存储、密码生成、快速查找和图形界面等功能。代码中使用了PyCryptodome、tkinter和pickle等库。
```python
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
import tkinter as tk
from tkinter import filedialog, messagebox
import pickle
# 定义密码条目类
class PasswordEntry:
def __init__(self, name, url, email, text, bank_account, phone, username, password, entry_type):
self.name = name
self.url = url
self.email = email
self.text = text
self.bank_account = bank_account
self.phone = phone
self.username = username
self.password = password
self.entry_type = entry_type
# 定义密码库类
class PasswordDatabase:
def __init__(self):
self.entries = []
# 添加密码条目
def add_entry(self, entry):
self.entries.append(entry)
# 删除密码条目
def delete_entry(self, entry):
self.entries.remove(entry)
# 查找密码条目
def find_entry(self, keyword):
results = []
for entry in self.entries:
if keyword in entry.name or keyword in entry.url or keyword in entry.text or keyword in entry.username:
results.append(entry)
return results
# 生成密码
def generate_password(self, length=12, upper=True, lower=True, digit=True, special=True):
import string
import random
chars = ""
if upper:
chars += string.ascii_uppercase
if lower:
chars += string.ascii_lowercase
if digit:
chars += string.digits
if special:
chars += string.punctuation
return ''.join(random.choice(chars) for _ in range(length))
# 加密密码库
def encrypt(self, password):
key = get_random_bytes(16)
cipher = AES.new(key, AES.MODE_EAX)
ciphertext, tag = cipher.encrypt_and_digest(pickle.dumps(self.entries))
return key, cipher.nonce, tag, ciphertext
# 解密密码库
def decrypt(self, key, nonce, tag, ciphertext):
cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)
plaintext = pickle.loads(cipher.decrypt_and_verify(ciphertext, tag))
self.entries = plaintext
# 定义密码管理工具类
class PasswordManager:
def __init__(self):
self.password_db = None
self.key = None
self.nonce = None
self.tag = None
self.ciphertext = None
# 创建新的密码库
def new_password_db(self):
self.password_db = PasswordDatabase()
# 打开密码库
def open_password_db(self):
filename = filedialog.askopenfilename(filetypes=[('Password Database', '*.pdb')])
if filename:
with open(filename, 'rb') as f:
self.key, self.nonce, self.tag, self.ciphertext = pickle.load(f)
# 保存密码库
def save_password_db(self):
if not self.password_db:
messagebox.showerror('Error', 'No password database opened')
return
filename = filedialog.asksaveasfilename(defaultextension='.pdb', filetypes=[('Password Database', '*.pdb')])
if filename:
with open(filename, 'wb') as f:
pickle.dump((self.key, self.nonce, self.tag, self.ciphertext), f)
# 解密密码库
def decrypt_password_db(self, password):
cipher = AES.new(password.encode(), AES.MODE_EAX, nonce=self.nonce)
plaintext = pickle.loads(cipher.decrypt_and_verify(self.ciphertext, self.tag))
self.password_db = plaintext
# 加密密码库
def encrypt_password_db(self, password):
self.key = get_random_bytes(16)
cipher = AES.new(password.encode(), AES.MODE_EAX)
self.nonce = cipher.nonce
self.tag = cipher.digest()
self.ciphertext = cipher.encrypt(pickle.dumps(self.password_db.entries))
# 添加密码条目
def add_password_entry(self, name, url, email, text, bank_account, phone, username, password, entry_type):
entry = PasswordEntry(name, url, email, text, bank_account, phone, username, password, entry_type)
self.password_db.add_entry(entry)
# 删除密码条目
def delete_password_entry(self, entry):
self.password_db.delete_entry(entry)
# 查找密码条目
def find_password_entry(self, keyword):
return self.password_db.find_entry(keyword)
# 生成密码
def generate_password(self, length=12, upper=True, lower=True, digit=True, special=True):
return self.password_db.generate_password(length, upper, lower, digit, special)
# 定义图形界面类
class PasswordManagerGUI:
def __init__(self):
self.password_manager = PasswordManager()
self.window = tk.Tk()
self.window.title('Password Manager')
self.window.geometry('800x600')
# 密码库操作面板
db_panel = tk.Frame(self.window)
db_panel.pack(side='left', fill='y')
new_db_button = tk.Button(db_panel, text='New', command=self.new_db)
new_db_button.pack(fill='x')
open_db_button = tk.Button(db_panel, text='Open', command=self.open_db)
open_db_button.pack(fill='x')
save_db_button = tk.Button(db_panel, text='Save', command=self.save_db)
save_db_button.pack(fill='x')
# 密码条目操作面板
entry_panel = tk.Frame(self.window)
entry_panel.pack(side='right', fill='y')
add_entry_button = tk.Button(entry_panel, text='Add', command=self.add_entry)
add_entry_button.pack(fill='x')
delete_entry_button = tk.Button(entry_panel, text='Delete', command=self.delete_entry)
delete_entry_button.pack(fill='x')
find_entry_button = tk.Button(entry_panel, text='Find', command=self.find_entry)
find_entry_button.pack(fill='x')
# 密码条目列表
entry_list_panel = tk.Frame(self.window)
entry_list_panel.pack(side='top', fill='both', expand=True)
self.entry_list = tk.Listbox(entry_list_panel, selectmode='single')
self.entry_list.pack(side='left', fill='both', expand=True)
self.entry_list.bind('<<ListboxSelect>>', self.update_entry_fields)
# 密码条目详细信息
entry_detail_panel = tk.Frame(self.window)
entry_detail_panel.pack(side='bottom', fill='both', expand=True)
tk.Label(entry_detail_panel, text='Name:').grid(row=0, column=0)
self.name_entry = tk.Entry(entry_detail_panel)
self.name_entry.grid(row=0, column=1)
tk.Label(entry_detail_panel, text='URL:').grid(row=1, column=0)
self.url_entry = tk.Entry(entry_detail_panel)
self.url_entry.grid(row=1, column=1)
tk.Label(entry_detail_panel, text='Email:').grid(row=2, column=0)
self.email_entry = tk.Entry(entry_detail_panel)
self.email_entry.grid(row=2, column=1)
tk.Label(entry_detail_panel, text='Text:').grid(row=3, column=0)
self.text_entry = tk.Entry(entry_detail_panel)
self.text_entry.grid(row=3, column=1)
tk.Label(entry_detail_panel, text='Bank Account:').grid(row=4, column=0)
self.bank_account_entry = tk.Entry(entry_detail_panel)
self.bank_account_entry.grid(row=4, column=1)
tk.Label(entry_detail_panel, text='Phone:').grid(row=5, column=0)
self.phone_entry = tk.Entry(entry_detail_panel)
self.phone_entry.grid(row=5, column=1)
tk.Label(entry_detail_panel, text='Username:').grid(row=6, column=0)
self.username_entry = tk.Entry(entry_detail_panel)
self.username_entry.grid(row=6, column=1)
tk.Label(entry_detail_panel, text='Password:').grid(row=7, column=0)
self.password_entry = tk.Entry(entry_detail_panel, show='*')
self.password_entry.grid(row=7, column=1)
tk.Label(entry_detail_panel, text='Type:').grid(row=8, column=0)
self.type_entry = tk.Entry(entry_detail_panel)
self.type_entry.grid(row=8, column=1)
# 密码生成面板
password_gen_panel = tk.Frame(self.window)
password_gen_panel.pack(side='bottom', fill='x')
password_length_label = tk.Label(password_gen_panel, text='Length:')
password_length_label.pack(side='left', padx=5)
self.password_length_entry = tk.Entry(password_gen_panel, width=5)
self.password_length_entry.pack(side='left')
self.password_length_entry.insert(0, '12')
uppercase_checkbox = tk.Checkbutton(password_gen_panel, text='Uppercase')
uppercase_checkbox.pack(side='left', padx=5)
lowercase_checkbox = tk.Checkbutton(password_gen_panel, text='Lowercase')
lowercase_checkbox.pack(side='left', padx=5)
digit_checkbox = tk.Checkbutton(password_gen_panel, text='Digit')
digit_checkbox.pack(side='left', padx=5)
special_checkbox = tk.Checkbutton(password_gen_panel, text='Special')
special_checkbox.pack(side='left', padx=5)
generate_password_button = tk.Button(password_gen_panel, text='Generate', command=self.generate_password)
generate_password_button.pack(side='left', padx=5)
# 创建新的密码库
def new_db(self):
self.password_manager.new_password_db()
self.entry_list.delete(0, tk.END)
# 打开密码库
def open_db(self):
self.password_manager.open_password_db()
password = messagebox.askstring('Password', 'Enter password:', show='*')
if password:
try:
self.password_manager.decrypt_password_db(password)
self.update_entry_list()
except:
messagebox.showerror('Error', 'Invalid password')
# 保存密码库
def save_db(self):
if self.password_manager.password_db:
password = messagebox.askstring('Password', 'Enter password:', show='*')
if password:
self.password_manager.encrypt_password_db(password)
self.password_manager.save_password_db()
# 添加密码条目
def add_entry(self):
name = self.name_entry.get()
url = self.url_entry.get()
email = self.email_entry.get()
text = self.text_entry.get()
bank_account = self.bank_account_entry.get()
phone = self.phone_entry.get()
username = self.username_entry.get()
password = self.password_entry.get()
entry_type = self.type_entry.get()
if name and password:
self.password_manager.add_password_entry(name, url, email, text, bank_account, phone, username, password, entry_type)
self.update_entry_list()
# 删除密码条目
def delete_entry(self):
selected_index = self.entry_list.curselection()
if selected_index:
selected_entry = self.entry_list.get(selected_index[0])
for entry in self.password_manager.password_db.entries:
if entry.name == selected_entry:
self.password_manager.delete_password_entry(entry)
self.update_entry_list()
break
# 查找密码条目
def find_entry(self):
keyword = messagebox.askstring('Find', 'Enter keyword:')
if keyword:
results = self.password_manager.find_password_entry(keyword)
if