Day 29 Let's go
오늘 만들 프로그램은 Password Manger.
랜덤하게 보안성 높은 비밀번호를 생성하고 웹사이트 별로 username(or email)과 password를 저장하는 기능을 가지고 있는 프로그램이다. 웹사이트와 유저네임 입력후 비밀번호 생성하기를 누르면 램덤한 비밀번호가 생성되고 add를 누르면 별도로 정보가 저장되며 (웹사이트. 유저네임, 비밀번호가 함께) 또한 생성된 비밀번호는 바로 클립보드에 저장되어서 웹사이트에서 붙여넣기를 통해 바로 사용할 수 있는 기능만든다.
from tkinter import *
window = Tk()
window.title("Password Manager")
window.config(padx=20, pady=20)
canvas = Canvas(width=200, height=200)
logo_img = PhotoImage(file="logo.png")
canvas.create_image(100, 100, image=logo_img)
canvas.pack()
window.mainloop()
setting up some very basic stuff.
Grid 계획
그리드 시스템에서 더 넓게 사용하고 싶을때
예) 웹사이트와 이메일의 input box, add 버튼
width 조절 X
columnspan 사용
window = Tk()
window.title("Password Manager")
window.config(padx=50, pady=60)
canvas = Canvas(width=200, height=200)
logo_img = PhotoImage(file="logo.png")
canvas.create_image(100, 100, image=logo_img)
canvas.grid(column=1, row=0)
# Label
website_label = Label(text="Website: ", font=("Arial", 14, "bold"))
website_label.grid(column=0, row=1)
email_label = Label(text="Email/Username: ", font=("Arial", 14, "bold"))
email_label.grid(column=0, row=2)
password_label = Label(text="Password: ", font=("Arial", 14, "bold"))
password_label.grid(column=0, row=3)
# Entry
website_entry = Entry(width=35)
website_entry.grid(column=1, row=1, columnspan=2)
website_entry.focus()
email_entry = Entry(width=35)
email_entry.grid(column=1, row=2, columnspan=2)
password_entry = Entry(width=21)
password_entry.grid(column=1, row=3)
# Button
generate_button = Button(text="Generate Password")
generate_button.grid(column=2, row=3)
add_button = Button(text="Add", width=36)
add_button.grid(column=1, row=4, columnspan=2)
window.mainloop()
레이아웃 완성~!
Placeing a cursor at the entry when this program starts
website_entry.focus()
Pre-typed email.
email_entry.insert(0, "abcdefg@gmail.com")
Next step,
saving information and clearing entries.
def save_info():
website = website_entry.get().title()
email = email_entry.get()
password = password_entry.get()
with open("data.txt", "a") as data_file:
data_file.write(f"{website} | {email} | {password}\n")
website_entry.delete(0, END)
password_entry.delete(0, END)
저장 전 확인하는 pop-up
def save_info():
website = website_entry.get().title()
email = email_entry.get()
password = password_entry.get()
is_ok = messagebox.askokcancel(title=website, message=f"These are the details entered: \nEmail: {email} "
f"\nPassword: {password} \nIs it okay to save?")
if is_ok:
with open("data.txt", "a") as data_file:
data_file.write(f"{website} | {email} | {password}\n")
website_entry.delete(0, END)
password_entry.delete(0, END)
Next step:
password generator
# Password Generator Project
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
symbols = ['!', '#', '$', '%', '&', '(', ')', '*', '+']
print("Welcome to the PyPassword Generator!")
nr_letters = int(input("How many letters would you like in your password?\n"))
nr_symbols = int(input(f"How many symbols would you like?\n"))
nr_numbers = int(input(f"How many numbers would you like?\n"))
# Eazy Level - Order not randomised:
# e.g. 4 letter, 2 symbol, 2 number = JduE&!91
password = ""
for char in range(1, nr_letters + 1):
password += random.choice(letters)
for char in range(1, nr_symbols + 1):
password += random.choice(symbols)
for char in range(1, nr_numbers + 1):
password += random.choice(numbers)
print(password)
# Hard Level - Order of characters randomised:
# e.g. 4 letter, 2 symbol, 2 number = g^2jk8&P
pwd = []
for char in range(1, nr_letters + 1):
pwd += random.choice(letters)
for char in range(1, nr_symbols + 1):
pwd += random.choice(symbols)
for char in range(1, nr_numbers + 1):
pwd += random.choice(numbers)
random.shuffle(pwd)
pw = ""
for char in pwd:
pw += char
print(pw)
예전에 Day 5때 만들어둔 코드를 그동안 배운 list comprehension으로 정리
def generate_password():
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
symbols = ['!', '#', '$', '%', '&', '(', ')', '*', '+']
password_letters = [choice(letters) for _ in range(0, randint(8, 10))]
password_symbols = [choice(symbols) for _ in range(0, randint(2, 4))]
password_numbers = [choice(numbers) for _ in range(0, randint(2, 4))]
password_list = password_letters + password_symbols + password_numbers
shuffle(password_list)
password = "".join(password_list)
password_entry.insert(0, password)
그리고 password를 생성함과 동시에 생성된 비밀번호가 클립보드에 저장되어 바로 붙여넣기해 사용할 수 있도록 하는 코드
import pyperclip
pyperclip.copy(password)
Final code
from tkinter import *
from tkinter import messagebox
from random import randint, choice, shuffle
import pyperclip
# ---------------------------- PASSWORD GENERATOR ------------------------------- #
def generate_password():
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
symbols = ['!', '#', '$', '%', '&', '(', ')', '*', '+']
password_letters = [choice(letters) for _ in range(0, randint(8, 10))]
password_symbols = [choice(symbols) for _ in range(0, randint(2, 4))]
password_numbers = [choice(numbers) for _ in range(0, randint(2, 4))]
password_list = password_letters + password_symbols + password_numbers
shuffle(password_list)
password = "".join(password_list)
password_entry.insert(0, password)
pyperclip.copy(password)
# ---------------------------- SAVE PASSWORD ------------------------------- #
def save_info():
website = website_entry.get().title()
email = email_entry.get()
password = password_entry.get()
if len(website) == 0 or len(email) == 0 or len(password) == 0 :
messagebox.showinfo(title="Oops", message="Please make sure you haven't left any fields empty")
else:
is_ok = messagebox.askokcancel(title=website, message=f"These are the details entered: \nEmail: {email} "
f"\nPassword: {password} \nIs it okay to save?")
if is_ok:
with open("data.txt", "a") as data_file:
data_file.write(f"{website} | {email} | {password}\n")
website_entry.delete(0, END)
password_entry.delete(0, END)
# ---------------------------- UI SETUP ------------------------------- #
window = Tk()
window.title("Password Manager")
window.config(padx=50, pady=60)
canvas = Canvas(width=200, height=200)
logo_img = PhotoImage(file="logo.png")
canvas.create_image(100, 100, image=logo_img)
canvas.grid(column=1, row=0)
# Label
website_label = Label(text="Website: ", font=("Arial", 14, "bold"))
website_label.grid(column=0, row=1)
email_label = Label(text="Email/Username: ", font=("Arial", 14, "bold"))
email_label.grid(column=0, row=2)
password_label = Label(text="Password: ", font=("Arial", 14, "bold"))
password_label.grid(column=0, row=3)
# Entry
website_entry = Entry(width=35)
website_entry.grid(column=1, row=1, columnspan=2)
website_entry.focus()
email_entry = Entry(width=35)
email_entry.grid(column=1, row=2, columnspan=2)
email_entry.insert(0, "abcdefg@gmail.com")
password_entry = Entry(width=21)
password_entry.grid(column=1, row=3)
# Button
generate_button = Button(text="Generate Password", command=generate_password)
generate_button.grid(column=2, row=3)
add_button = Button(text="Add", width=36, command=save_info)
add_button.grid(column=1, row=4, columnspan=2)
window.mainloop()
'Udemy Python Notes' 카테고리의 다른 글
Day 31 Flash Card App Capstone Project (0) | 2022.12.07 |
---|---|
Day 30 Errors, Exceptions, and Json data (0) | 2022.12.05 |
Day 28 - Pomodoro Timer (0) | 2022.12.01 |
Day 27 - Mile to Kilometers Converter Project (0) | 2022.11.29 |
Day 27 (0) | 2022.11.29 |