tkinter를 이용해서 웹사이트, 아이디, 비밀번호를 저장하여
필요할 때마다 확인할 수 있는
나만의 패스워드 매니저를 만들어보자.
1. tkinter기본 window만들기
mainloop() : 화면 꺼지지 않고, 계속 작동하도록 하기
from tkinter import *
window = Tk()
window.mainloop()
2. 제목: my password manager
title() : 화면 창 맨 위, 바에 제목 적기
window.title("my password manager")
3. 캔버스 만들기, 가로:200, 높이:200
Canvas(width, height) : 캔버스 클래스 놓기. 안에 여러 컴포넌트를 놓을 수 있으며, 폭과 높이를 지정하기
canvas = Canvas(width=200, height=200)
4. 사진 가져오기 , 중앙에 배치하기
PhotoImage(file) : 이미지 파일 가져오기
create_image(x, y, image) : 캔버스에 이미지 놓기, x,y 위치를 정하고, 놓일 image 적기
picture = PhotoImage(file = "paswd.png")
canvas.create_image(100, 90, image=picture)
5. 여백 20씩 주기
상황에 맞게 여백 조절하기
window.config(padx=20, pady=20)
6. 윈도우 배경색깔 주기
config(bg) : 배경색깔 주기
window.config(padx=20, pady=20, bg="white")
7. 사진 배경색깔 주기
Canvas(bg) : canvas 생성될 때 배경색깔 주기
canvas = Canvas(width=200, height=200, bg= "white")
8. 경계 없애기
highlightthickness=0 : 사진과 윈도우 경계 없애기
canvas = Canvas(width=200, height=200, bg= "white", highlightthickness=0)
9. 사진크기 1/2로 줄이기
subsample(x, y) : 사진 크기 줄이기
<-> zoom(x, y) : 사진 크기 늘이기
picture = picture.subsample(2,2)
10. 컴포넌트 생성하기, 레이아웃 배치하기
Label, Entry, Button 클래스로 컴포넌트 생성하고,
grid(row, column, columnspan)으로 레이아웃 배치하기
canvas = Canvas(width=200, height=200, bg= "white", highlightthickness=0)
picture = PhotoImage(file = "paswd.png")
picture = picture.subsample(2,2)
canvas.create_image(100, 90, image=picture)
canvas.grid(row=0, column=1)
website = Label(text="website", font=("Courier", 10, "bold"))
website.grid(row= 1, column=0)
website_input= Entry(width=40)
website_input.grid(row=1, column=1, columnspan=2)
email_username = Label(text="Email/Username", font=("Courier", 10, "bold"))
email_username.grid(row= 2, column=0)
email_username_input= Entry(width=40)
email_username_input.grid(row=2, column=1, columnspan=2)
password = Label(text="password", font=("Courier", 10, "bold"))
password.grid(row= 3, column=0)
password_input=Entry(width=24)
password_input.grid(row=3, column=1)
generate_password = Button(text="Generate Password", width=15)
generate_password.grid(row=3, column=2)
add = Button(text="Add", width=40)
add.grid(row=4, column=1, columnspan=2)
11. 라벨 배경 흰색으로 바꾸기
Label(bg) :라벨 배경 색깔 바꾸기
website = Label(text="website", font=("Courier", 10, "bold"), bg="white")
email_username = Label(text="Email/Username", font=("Courier", 10, "bold"), bg="white")
password = Label(text="password", font=("Courier", 10, "bold"), bg="white")
12. 패딩 조절하기
config(padx, pady) : 해당 길이로 여백주기
window.config(padx=50, pady=50, bg="white")
13. 커서 놓기
focus() 내가 원하는 위치에 커서 자동으로 놓기
website_input.focus()
14. 기본값 문자 설정하기
insert(index, string) : 해당 index에 string 삽입하기
email_username_input.insert(0, "olivia@coding.co.kr")
15. 입력값 받기
get() : 입력한 값을 받는다.
save_website = website_input.get()
save_email= email_username_input.get()
save_password = password_input.get()
16. 입력한 값을 파일에 저장
with open(file=파일경로, mode=a) as 이름:
데이터를 해당 file에 이어쓰기하여 저장한다.
def save_data():
save_website = website_input.get()
save_email= email_username_input.get()
save_password = password_input.get()
save_all = save_website + " | " + save_email +" | " + save_password
with open(file="data.txt", mode="a") as f:
f.write(save_all + "\n")
17. add버튼을 누르면 실행
command: 버튼을 눌렀을 때 실행되는 함수
add = Button(text="Add", width=40, command=save_data)
18. 저장되었다면, 글상자에 적은 데이터는 지우기
delete(start, end) : start index부터 end index까지 삭제되며, 전부를 삭제하고 싶다면 (0, END)를 쓴다.
website_input.delete(0, END)
email_username_input.delete(0, END)
password_input.delete(0, END)
19. 메시지 박스 열기
from tkinter import messagebox
1) 정보 보여주기
messagebox.showinfo(title="Title", message="message")
2) Yes or No 묻기
messagebox.askyesno(title="Title", message="message")
3) Ok or Cancel 묻기
messagebox.askokcancel(title="Title", message="message")
messagebox.askokcancel(title= save_website, message=f"이대로 저장해도 될까요?\n{save_all}")
20. 에러 메시지 박스 열기
if len(save_website)<1 or len(save_email)<1 or len(save_password)<1:
messagebox.showerror(title="에러", message="입력한 값이 너무 짧습니다")
else:
with open(file="data.txt", mode="a") as f:
f.write(save_all + "\n")
website_input.delete(0, END)
email_username_input.delete(0, END)
password_input.delete(0, END)
21. 입력 정보 확인 메시지 박스 열기
if len(save_website)<1 or len(save_email)<1 or len(save_password)<1:
messagebox.showerror(title="에러", message="입력한 값이 너무 짧습니다")
else:
is_ok = messagebox.askokcancel(title= save_website, message=f"이대로 저장해도 될까요?\n{save_all}")
if is_ok:
with open(file="data.txt", mode="a") as f:
f.write(save_all + "\n")
website_input.delete(0, END)
email_username_input.delete(0, END)
password_input.delete(0, END)
22. 패스워드 생성기 만들기
1) random 함수를 이용한다.
random.randint(a, b) : a부터 b까지의 숫자 중 하나를 선택하기
random.choice(list) : list에서 하나를 선택하기
random.shuffle(list) : list를 무작위로 섞기
2) join 메소드를 이용한다.
a.join(list) : list에 있는 요소를 a를 사잇돌로 두고 합쳐 string타입으로 출력한다.
예를 들어
'#'.join(['a','b','c'])
>> a#b#c
3) insert(index, string)
index자리에 string을 넣는다.
import random
def safe_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 = ['!', '#', '$', '%', '&', '(', ')', '*', '+']
nr_letters = random.randint(8, 10)
nr_symbols = random.randint(2, 4)
nr_numbers = random.randint(2, 4)
letters_list = [random.choice(letters) for char in range(nr_letters)]
symbols_list = [random.choice(symbols) for char in range(nr_symbols)]
numbers_list = [random.choice(numbers) for char in range(nr_numbers)]
password_list= letters_list + symbols_list + numbers_list
random.shuffle(password_list)
password = ''.join(password_list)
password_input.insert(0,password)
23. 패스워드 자동 복사하기
pyperclip 모듈을 이용한다.
- 복사하기 pyperclip.copy()
- 붙여넣기 pyperclip.paste()
import pyperclip
pyperclip.copy(password)
<최종코드>
from tkinter import *
from tkinter import messagebox
import random
import pyperclip
print('#'.join(['a','b','c']))
# ---------------------------- PASSWORD GENERATOR ------------------------------- #
def safe_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 = ['!', '#', '$', '%', '&', '(', ')', '*', '+']
nr_letters = random.randint(8, 10)
nr_symbols = random.randint(2, 4)
nr_numbers = random.randint(2, 4)
letters_list = [random.choice(letters) for char in range(nr_letters)]
symbols_list = [random.choice(symbols) for char in range(nr_symbols)]
numbers_list = [random.choice(numbers) for char in range(nr_numbers)]
password_list= letters_list + symbols_list + numbers_list
random.shuffle(password_list)
password = ''.join(password_list)
password_input.insert(0,password)
pyperclip.copy(password)
# ---------------------------- SAVE PASSWORD ------------------------------- #
def save_data():
save_website = website_input.get()
save_email= email_username_input.get()
save_password = password_input.get()
save_all = save_website + " | " + save_email +" | " + save_password
if len(save_website)<1 or len(save_email)<1 or len(save_password)<1:
messagebox.showerror(title="에러", message="입력한 값이 너무 짧습니다")
else:
is_ok = messagebox.askokcancel(title= save_website, message=f"이대로 저장해도 될까요?\n{save_all}")
if is_ok:
with open(file="data.txt", mode="a") as f:
f.write(save_all + "\n")
website_input.delete(0, END)
email_username_input.delete(0, END)
password_input.delete(0, END)
# ---------------------------- UI SETUP ------------------------------- #
window = Tk()
window.config(padx=50, pady=50, bg="white")
window.title("my password manager")
canvas = Canvas(width=200, height=200, bg= "white", highlightthickness=0)
picture = PhotoImage(file = "paswd.png")
picture = picture.subsample(2,2)
canvas.create_image(100, 90, image=picture)
canvas.grid(row=0, column=1)
#Label
website = Label(text="website", font=("Courier", 10, "bold"), bg="white")
website.grid(row= 1, column=0)
email_username = Label(text="Email/Username", font=("Courier", 10, "bold"), bg="white")
email_username.grid(row= 2, column=0)
password = Label(text="password", font=("Courier", 10, "bold"), bg="white")
password.grid(row= 3, column=0)
#Entry
website_input= Entry(width=40)
website_input.grid(row=1, column=1, columnspan=2)
website_input.focus()
email_username_input= Entry(width=40)
email_username_input.grid(row=2, column=1, columnspan=2)
email_username_input.insert(0, "olivia@coding.co.kr")
password_input=Entry(width=24)
password_input.grid(row=3, column=1)
#Button
generate_password = Button(text="Generate Password", width=15, command=safe_password)
generate_password.grid(row=3, column=2)
add = Button(text="Add", width=40, command=save_data)
add.grid(row=4, column=1, columnspan=2)
window.mainloop()
'파이썬 > 파이썬(python) 중급' 카테고리의 다른 글
[30-2 파이썬] 예외처리, try, except, else, finally (1) | 2022.09.19 |
---|---|
[30-1 파이썬] 예외의 종류 FileNotFoundError, KeyError, IndexError, TypeError (1) | 2022.09.19 |
[29-1 파이썬] tkinter grid 격자 관련 팁, columnspan, rowspan (0) | 2022.09.17 |
[28-6 파이썬] tkinter 타이머 만들기, after_cancel() (최종) (0) | 2022.09.17 |
[28-5 파이썬] tkinter 동적타이핑 (0) | 2022.09.17 |