密碼管理器 tk
首先第一步設定UI
import tkinter as tk
from tkinter import messagebox
import pyperclip
import json
window = tk.Tk()
window.title('密碼管理器')
window.config(padx=50, pady=50)
背景部分 要先讀取圖片 建立圖片物件
然設定畫布物件, 在新增畫布物件中的圖片屬性
# ------------UI
# 讀取圖片建立畫布
image_obj = tk.PhotoImage(
file='logo.png')
# 建立畫布物件,設定長寬
canvas_obj = tk.Canvas(width=200, height=190)
canvas_obj.create_image(100, 145, image=image_obj)
canvas_obj.grid(row=0, column=1)
設定欄位
網站: _______ 搜索
信箱: _____________
密碼:__________亂數產生密碼
建立/新增到json檔
Web_lab = tk.Label(text='Website:')
Web_lab.grid(row=1, column=0)
Web_Entry = tk.Entry(width=30)
Web_Entry.grid(row=1, column=1, sticky='w', columnspan=2)
# 預設光標的起始點
Web_Entry.focus()
Web_sear_but = tk.Button(text='search', width=8, command=check_web)
Web_sear_but.grid(row=1, column=2)
Email_Label = tk.Label(text='Email/Username:')
Email_Label.grid(row=2, column=0)
Email_Entry = tk.Entry(width=40)
Email_Entry.insert(0, string='example@google.com')
Email_Entry.grid(row=2, column=1, sticky='w', columnspan=2)
Pwd_Label = tk.Label(text='Password:')
Pwd_Label.grid(row=3, column=0)
Pwd_entry = tk.Entry(width=30)
Pwd_entry.grid(row=3, column=1, sticky='w')
Pwd_but = tk.Button(text='密碼產生器', width=8, command=genactor_pwd)
Pwd_but.grid(row=3, column=2)
creat_but = tk.Button(text='建立/新增', width=39, command=data_to_txt)
creat_but.grid(row=4, column=1, columnspan=2)
window.mainloop()
---------------賦予按鈕功能
#檢查是否已經註冊過
def check_web():
'檢查是否已經註冊過該網站'
try:
website = Web_Entry.get()
with open('密碼管理本.json', 'r')as file:
data = json.load(file)
except FileNotFoundError:
print(f'目前資料庫內無該用戶')
messagebox.showinfo(
title='沒有json檔', message='資料庫不存在')
else:
if website in data:
'找到囉'
print(data)
messagebox.showinfo(
title=website, message=f'email:{data[website]["eamil"]}\nPwd:{data[website]["Pwd"]}')
else:
messagebox.showinfo(
title='pass', message=f'不在資料庫中')
#定義建立資料的部分
# 定義案件功能
def data_to_txt():
'生成文本存取密碼到json'
res = []
res_dict = {}
Web = Web_Entry.get()
print(f'取得輸入網站:{Web}')
User = Email_Entry.get()
print(f'取得輸入用戶:{User}')
Pwd = Pwd_entry.get()
print(f'取得輸入密碼:{Pwd}')
# 檢查資料是否留白
if len(Web) == 0 or len(User) == 0 or len(Pwd) == 0:
messagebox.showinfo(title='警告', message='檢查資料是否留白')
else:
res_dict['Web'] = Web
res_dict['User'] = User
res_dict['Pwd'] = Pwd
# 轉json格式
res.append(res_dict)
json_dict = {
Web: {'eamil': User, 'Pwd': Pwd}
}
Is_ok = messagebox.askokcancel(title='確認使否存取以下資訊', message=f"""
即將存取以下資料:\n網站:{Web}\nUser={User}\nPwd={Pwd}""")
if Is_ok:
'如果沒有資料會拋出例外'
try:
with open('密碼管理本.json', 'r')as file:
# 讀取old data
data = json.load(file)
print(f'現有資料:={data}')
# 更新目前資料
except FileNotFoundError:
print(f'目前密碼管理本還不存在,直接建立')
data = json_dict
with open('密碼管理本.json', 'w')as file:
json.dump(data, file, indent=4)
except Exception as e:
print(f'有趣, 這個例外我沒想到{e}')
else:
'正常執行時,更新現有data,再重新寫入'
data.update(json_dict)
with open('密碼管理本.json', 'w')as file:
# 再重新寫入
json.dump(data, file, indent=4)
print(f'更新資料={data}')
finally:
'無論如何都要執行區'
Web_Entry.delete(0, tk.END)
# Email_Entry.delete(0,tk.END)
Pwd_entry.delete(0, tk.END)
#定義亂數產生密碼的部分
def genactor_pwd():
import random
'亂數產生密碼,亂數產生8-12位密碼'
symbol = list("!@#$%^&^&*")
pwd_source = list('abcdefghijklmnopqurtuvwxyz0123456789')
pwd_source.extend(symbol)
num = random.randint(8, 12)
print(f'產生密碼有{num}個')
pwd_data = random.choices(pwd_source, k=num)
pwd_data_str = ''.join(pwd_data)
# 複製產生的密碼
pyperclip.copy(pwd_data_str)
print(f'產生的密碼為{pwd_data_str}')
# 顯示在欄位上
Pwd_entry.delete(0, tk.END) # 刪除從0到末尾的文本
Pwd_entry.insert(0, string=pwd_data_str)
標籤: 小專案


0 個意見:
張貼留言
訂閱 張貼留言 [Atom]
<< 首頁