
Tkinter ๋ชจ๋๋ก ํจ์ค์๋๋ฅผ ์์ฑํ๊ณ ํ ์คํธ ํ์ผ์ ์ ์ฅํ๋ ํ๋ก๊ทธ๋จ
๐ ์ ์ ์ฌํญ
โจ๏ธ main.py
from tkinter import *
# ---------------------------- UI SETUP ------------------------------- #
window = Tk()
window.title("Passwork 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.grid()
window.mainloop()
๐ ์ ์ ์ฌํญ
- ๋ ์ด์์ : 5ํ 3์ด
- ์์ ฏ ํ๋๊ฐ ์ฌ๋ฌ ์ด์ ๊ฑธ์น๋๋ก ์ค์ ํด์ผ ํ๋ค
widget.grid( โฆ, columnspan=num ) : grid์ ์์ฑ์ผ๋ก, ํด๋น ์์ ฏ์ด ๊ฐ์ ์ด์ ๊ฑธ์ณ์งfrom tkinter import * window = Tk() # ๋นจ๊ฐ์ ์์ r = Label(bg="red", width=20, height=5) r.grid(row=0, column=0) # ์ด๋ก์ ์์ g = Label(bg="green", width=20, height=5) g.grid(row=1, column=1) # ํ๋์ ์์ b = Label(bg="blue", width=40, height=5) b.grid(row=2, column=0, columnspan=2)![]()
โจ๏ธ main.py
from tkinter import *
# ---------------------------- UI SETUP ------------------------------- #
window = Tk()
window.title("Passwork Manager")
window.config(padx=50, pady=50)
# ์บ๋ฒ์ค
canvas = Canvas(width=200, height=200)
logo_img = PhotoImage(file="logo.png")
canvas.create_image(130, 100, image=logo_img)
canvas.grid(row=0, column=1)
# ๋ ์ด๋ธ
website_label = Label(text="Website:")
website_label.grid(row=1, column=0)
email_label = Label(text="Email/Username:")
email_label.grid(row=2, column=0)
password_label = Label(text="Password:")
password_label.grid(row=3, column=0)
# ์ํธ๋ฆฌ
website_entry = Entry(width=38)
website_entry.grid(row=1, column=1, columnspan=2)
email_entry = Entry(width=38)
email_entry.grid(row=2, column=1, columnspan=2)
password_entry = Entry(width=21)
password_entry.grid(row=3, column=1)
# ๋ฒํผ
generate_password_button = Button(text="Generate Password")
generate_password_button.grid(row=3, column=2)
add_button = Button(text="Add", width=36)
add_button.grid(row=4, column=1, columnspan=2)
window.mainloop()
๐ ์ ์ ์ฌํญ
- ์์ํ์๋ง์ ์ปค์๊ฐ website๋ฅผ ์ ๋ ฅํ๋ ๋ถ๋ถ์์ ํ์ฑํ๋๋๋ก ๋ฐ๊พธ๊ธฐ
entry.focus() : ์ปค์๋ฅผ ํด๋น ์ํธ๋ฆฌ ์ ๋ ฅ ํ๋๋ก ํฌ์ปค์ฑ- email ํ๋๋ ๋ฏธ๋ฆฌ ์ ๋ ฅํด ๋๊ธฐ
entry.insert( index, string ) : ์ฃผ์ด์ง ์ธ๋ฑ์ค์ ๋ฌธ์์ด์ ์ฝ์
index: ์ปค์์ ์์น
- 0 : ์ํธ๋ฆฌ ์์ ๋ถ๋ถ(๋งจ ์)์ ๋ฌธ์์ด ์ฝ์
- END : ์ ๋ ฅ ํ๋ ์์ ๋งจ ๋ง์ง๋ง ๋ฌธ์๋ฅผ ๋ํ๋ด๋ ์์
string: ์ฝ์ ํ๋ ค๋ ๋ฌธ์์ด- add ๋ฒํผ์ ๋๋ฅด๋ฉด data.txt ํ์ผ์ ์ ๋ ฅํ ์ ๋ณด๋ค์ ์ ์ฅํ๊ธฐ
entry.get( ) : ํด๋น ์ํธ๋ฆฌ ํ๋์ ์ปจํ ์ธ ๋ฅผ ๋ฌธ์์ด๋ก ๋ฐํ- add ๋ฒํผ์ ๋๋ฅด๊ณ ๋๋ฉด, ์ ๋ ฅ ํ๋์ ์๋ ๊ฒ๋ค์ ์ด๊ธฐํํ๊ธฐ
entry.delete( first, last=None ) : ์ฃผ์ด์ง ๋ฒ์์ ๋ฌธ์๋ค์ ์ญ์
first: ๋ฒ์์ ์์last: ๋ฒ์์ ๋์ผ๋ก, ์๋ต ์ ๋ฌธ์ ํ๋๋ง ์ง์์ง
โจ๏ธ main.py
from tkinter import *
# ---------------------------- SAVE PASSWORD ------------------------------- #
def save():
website = website_entry.get()
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)
# ---------------------------- UI SETUP ------------------------------- #
โฆ
add_button = Button(text="Add", width=36, command=save)
โฆ
๐ data.txt
Amazon | example@gmail.com | 123456
Facebook | example@gmail.com | Qwerty
Google | example@gmail.com | Zxcvbn
๐ ์ ์ ์ฌํญ
- ์ฌ์ฉ์๊ฐ Add๋ฒํผ์ ๋๋ฅผ ๋, ๊ทธ๋ฅ ์ ์ฅ๋๋ ๊ฒ์ด ์๋๋ผ ์ธ๋ถ์ ๋ณด๋ฅผ ์ ์ ์์ด์ผ ํ๋ค
- Tkinter ํ์ ์ฐฝ(standard diglogs)์ ๋ฉ์์ง ๋ฐ์ค(message boxes)
(ํด๋์ค๊ฐ ์๋๊ธฐ ๋๋ฌธ์ *๋ก tkinter๋ฅผ ์ํฌํธํ์ด๋ ๋ฐ๋ก ์ํฌํธ ํด์ผ ํจ)
- messeagebox.showinfo( title=text, message=text, **optionsโฆ )
- messeagebox.showwarning( title=text, message=text, **optionsโฆ )
- messeagebox.showerror( title=text, message=text, **optionsโฆ )
- messeagebox.askquestion( title=text, message=text, **optionsโฆ )
- messeagebox.askokcancel( title=text, message=text, **optionsโฆ )
- messeagebox.askretrycalcel( title=text, message=text, **optionsโฆ )
- ์ฌ์ฉ์๊ฐ Add๋ฒํผ์ ๋๋ฅผ ๋, ์น์ฌ์ดํธ๋ ๋น๋ฐ๋ฒํธ๊ฐ ๋ฏธ์์ฑ๋๋ค๋ฉด ์ด๋ฅผ ์๋ ค์ผ ํ๋ค
- ์น์ฌ์ดํธ๋ ๋น๋ฐ๋ฒํธ ํ๋์ ์์ฑํ ์ฝํ ์ธ ์ ๊ธธ์ด๊ฐ 0์ผ ๋๋ฅผ ์๋ฏธ
โจ๏ธ main.py
from tkinter import *
from tkinter import messagebox
# ---------------------------- SAVE PASSWORD ------------------------------- #
def save():
website = website_entry.get()
email = email_entry.get()
password = password_entry.get()
# ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํ๋ ๋ฉ์์ง ๋ฐ์ค
if len(website) == 0 or len(password) == 0:
messagebox.showwarning(message="Please make sure "
"you haven't left any fields empty.")
else:
# ์
๋ ฅํ ์ ๋ณด๋ฅผ ๋ค์ ํ์ธ ํ, ok๋ฅผ ๋๋ฅด๋ฉด ์ ์ฅํ๊ณ calcel์ ๋๋ฅด๋ฉด ์ทจ์ํ๋ ๋ฉ์์ง ๋ฐ์ค
is_ok = messagebox.askokcancel(title=website,
message=f"these are the details entered:\n"
f"Email: {email}\nPassword: {password}\n"
f"Is it ok 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 ------------------------------- #
โฆ
add_button = Button(text="Add", width=36, command=save)
โฆ
๐ ์ ์ ์ฌํญ
- ๐๏ธ Day5 ํ๋ก์ ํธ : ๋น๋ฐ๋ฒํธ ์์ฑ๊ธฐ ์ฝ๋ ์ฌํ์ฉ ๋ฐ ์์
- ์ํ๋ ์๋ฆฌ์๋ฅผ ์ ๋ ฅํ๋ ๋์ ์ง์
(๋ฌธ์ : 8 - 10์๋ฆฌ, ๊ธฐํธ : 2 - 4์๋ฆฌ, ์ซ์ : 2 - 4์๋ฆฌ)- ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ ์ผ๋ก ์ฝ๋ ๋จ์ถ
- string.join( iterable ) : ์ํ์ค์ ๋ชจ๋ ์์๋ฅผ string์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ด์ ์ ๋ฌธ์์ด ์์ฑ
- ์์๋ค์ ๋น ์นธ ์์ด ํ๋๋ก ๊ฒฐํฉํ๋ ค๋ฉด string ์๋ฆฌ์ ๋น ๋ฌธ์์ด ์ ๋ ฅ
- Generate Password ๋ฒํผ์ ๋๋ฅด๋ฉด, Password ํ๋์ ์๋ ์์ฑ๋๋๋ก ๋ณ๊ฒฝ
- pyperclip (pypi ๋งํฌ)
- ๊ธฐ๋ฅ1 : ํด๋ฆฝ๋ณด๋์ ์ง์ ํ ํ ์คํธ๋ฅผ ๋ฐ๋ก ๋ณต์ฌ
- ๊ธฐ๋ฅ2 : ํด๋ฆฝ๋ณด๋์ ๋ด์ฉ์ ๋ฐ๋ก ๋ถ์ฌ๋ฃ๊ธฐ
โจ๏ธ main.py
from tkinter import *
from tkinter import messagebox
from random import choice, randint, shuffle
import pyperclip
# ---------------------------- PASSWORD GENERATOR ------------------------------- #
def generate_password():
# ์ด๋ฏธ ์์ฑ๋ ํจ์ค์๋๊ฐ ์๋ ์ํ์์ ๋ ๋ฒํผ์ ๋๋ฅผ ๊ฒฝ์ฐ ํจ์ค์๋ ์ํธ๋ฆฌ ๋น์ฐ๊ธฐ
password_entry.delete(0, END)
# Day5 ์ฝ๋ ์ฌํ์ฉ ๋ฐ ์์
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_list = [choice(letters) for _ in range(randint(8, 10))]
password_list += [choice(symbols) for _ in range(randint(2, 4))]
password_list += [choice(numbers) for _ in range(randint(2, 4))]
shuffle(password_list)
password = "".join(password_list)
password_entry.insert(0, password)
pyperclip.copy(password)
# ---------------------------- SAVE PASSWORD ------------------------------- #
def save():
website = website_entry.get()
email = email_entry.get()
password = password_entry.get()
if len(website) == 0 or len(password) == 0:
messagebox.showwarning(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:\n"
f"Email: {email}\nPassword: {password}\n"
f"Is it ok 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("Passwork Manager")
window.config(padx=50, pady=50)
canvas = Canvas(width=200, height=200)
logo_img = PhotoImage(file="logo.png")
canvas.create_image(130, 100, image=logo_img)
canvas.grid(row=0, column=1)
website_label = Label(text="Website:")
website_label.grid(row=1, column=0)
email_label = Label(text="Email/Username:")
email_label.grid(row=2, column=0)
password_label = Label(text="Password:")
password_label.grid(row=3, column=0)
website_entry = Entry(width=38)
website_entry.grid(row=1, column=1, columnspan=2)
website_entry.focus()
email_entry = Entry(width=38)
email_entry.grid(row=2, column=1, columnspan=2)
email_entry.insert(0, "example@gmail.com")
password_entry = Entry(width=21)
password_entry.grid(row=3, column=1)
generate_password_button = Button(text="Generate Password", command=generate_password)
generate_password_button.grid(row=3, column=2)
add_button = Button(text="Add", width=36, command=save)
add_button.grid(row=4, column=1, columnspan=2)
window.mainloop()