Tkinter 암호 금고 화면 사용

last part에서 우리는 응용 프로그램의 기본 신분 검증 부분을 소개했다.이 부분에서 우리는 암호 금고 화면을 구축할 것이다.

아치법


비밀번호 금고 화면에는 비밀번호 추가, 비밀번호 업데이트, 비밀번호 삭제 등 몇 개의 단추가 있습니다.이 단추를 누르면 특정한 방법을 호출할 것입니다.이 방법을 작성해 보겠습니다.
from tkinter import simpledialog
from database import init_database

class VaultMethods:

    def __init__ (self):
        self.db, self.cursor = init_database()

    def popup_entry(self, heading):
        answer = simpledialog.askstring("Enter details", heading)
        return answer

    def add_password(self, vault_screen):
        platform = self.popup_entry("Platform")
        userid = self.popup_entry("Username/Email")
        password = self.popup_entry("Password")

        insert_cmd = """INSERT INTO vault(platform, userid, password) VALUES (?, ?, ?)"""
        self.cursor.execute(insert_cmd, (platform, userid, password))
        self.db.commit()
        vault_screen()

    def update_password(self, id, vault_screen):
        password = self.popup_entry("Enter New Password")
        self.cursor.execute(
            "UPDATE vault SET password = ? WHERE id = ?", (password, id))
        self.db.commit()
        vault_screen()

    def remove_password(self, id, vault_screen):
        self.cursor.execute("DELETE FROM vault WHERE id = ?", (id,))
        self.db.commit()
        vault_screen()
위 스크립트에서 simpledialog을 사용하여 팝업 창을 만듭니다.버튼을 클릭할 때마다 팝업 창이 나타나 정보를 묻습니다.모든 메서드를 포함하는 VaultMethod 클래스를 만들었습니다.구조 함수에서 우리는 dbcursor의 대상을 얻었다.
첫 번째 방법은 popup_entry()이라고 한다.팝업 창을 만드는 단축키로 이 방법을 만들었습니다.이 방법은 제목을 매개 변수로 합니다.askstring 방법을 사용하여 팝업 창을 만듭니다.그런 다음 팝업 입력 필드에 입력한 값을 반환합니다.
다음 방법은 add_password()입니다.vault 화면을 매개 변수로 합니다.새 암호를 추가할 때마다 플랫폼 이름, 사용자 이름/이메일, 암호 등 세 가지 세부 정보가 필요합니다.따라서 같은 페이지를 위한 세 개의 팝업 창을 만들어야 합니다.위에서 만든 방법으로 팝업 창을 만들 것입니다.이 팝업 창에서 세 개의 상응하는 값을 얻은 후에 우리는 insert_cmd을 사용하여 이 데이터를 데이터베이스에 추가했다.그리고 다시 한 번 vault_screen()을 사용자에게 보여 드리겠습니다.
다음 방법은 update_password()입니다. 항목과vault 화면의 id (데이터베이스에서 온 것) 를 매개 변수로 합니다.그리고 새 비밀번호를 입력할 수 있도록 팝업 방법을 사용합니다.일단 우리가 새 암호의 값을 얻게 되면, 우리는 다른 데이터베이스 명령을 실행하여 제공된 id의 암호를 업데이트할 것이다.그리고 다시 한 번 vault_screen()을 사용자에게 보여 드리겠습니다.
마지막 방법은 remove_password()입니다. 항목과vault 화면의 id (데이터베이스에서 온 것) 를 매개 변수로 다시 사용합니다.이 방법에서, 우리는 제공한 id와 일치하는 항목만 삭제합니다.그리고 다시 한 번 vault_screen()을 사용자에게 보여 드리겠습니다.

3. 비밀번호 금고 화면


이것은 프로그램의 메인 화면입니다. 사용자는 새로운 비밀번호를 추가하고 이전에 저장한 비밀번호를 수정하며 비밀번호를 삭제하고 복사할 수 있습니다.
def password_vault_screen(self):
    for widget in self.window.winfo_children():
        widget.destroy()

    vault_methods = VaultMethods()

    self.window.geometry("850x350")
    main_frame = Frame(self.window)
    main_frame.pack(fill=BOTH, expand=1)

    main_canvas = Canvas(main_frame)
    main_canvas.pack(side=LEFT, fill=BOTH, expand=1)

    main_scrollbar = Scrollbar(main_frame, orient=VERTICAL, command=main_canvas.yview)
    main_scrollbar.pack(side=RIGHT, fill=Y)

    main_canvas.configure(yscrollcommand=main_scrollbar.set)
    main_canvas.bind('<Configure>', lambda e: main_canvas.configure(
            scrollregion=main_canvas.bbox("all")))

    second_frame = Frame(main_canvas)
    main_canvas.create_window((0, 0), window=second_frame, anchor="nw")

    generate_password_btn = Button(second_frame, text="Generate Password",
                                       command=PasswordGenerator)
    generate_password_btn.grid(row=1, column=2, pady=10)

    add_password_btn = Button(
            second_frame, text="Add New Password", command=partial(vault_methods.add_password, self.password_vault_screen))
    add_password_btn.grid(row=1, column=3, pady=10)

    lbl = Label(second_frame, text="Platform")
    lbl.grid(row=2, column=0, padx=40, pady=10)
    lbl = Label(second_frame, text="Email/Username")
    lbl.grid(row=2, column=1, padx=40, pady=10)
    lbl = Label(second_frame, text="Password")
    lbl.grid(row=2, column=2, padx=40, pady=10)

    self.cursor.execute("SELECT * FROM vault")

    if self.cursor.fetchall():
        i = 0
        while True:
            self.cursor.execute("SELECT * FROM vault")
            array = self.cursor.fetchall()

            platform_label = Label(second_frame, text=(array[i][1]))
            platform_label.grid(column=0, row=i + 3)

            account_label = Label(second_frame, text=(array[i][2]))
            account_label.grid(column=1, row=i + 3)

            password_label = Label(second_frame, text=(array[i][3]))
            password_label.grid(column=2, row=i + 3)

            copy_btn = Button(second_frame, text="Copy Password",
                                  command=partial(self.copy_text, array[i][3]))
            copy_btn.grid(column=3, row=i + 3, pady=10, padx=10)
            update_btn = Button(second_frame, text="Update Password",
                                    command=partial(vault_methods.update_password, array[i][0], self.password_vault_screen))
            update_btn.grid(column=4, row=i + 3, pady=10, padx=10)
            remove_btn = Button(second_frame, text="Delete Password",
                                    command=partial(vault_methods.remove_password, array[i][0], self.password_vault_screen))
            remove_btn.grid(column=5, row=i + 3, pady=10, padx=10)

            i += 1

            self.cursor.execute("SELECT * FROM vault")
            if len(self.cursor.fetchall()) <= i:
                break
위의 스크립트에서, 우선, 우리는 다른 열린 작은 위젯을 모두 삭제합니다. (만약 있다면.)그런 다음 VaultMethod 클래스의 vault_method 객체를 작성합니다.그리고 우리는 프레임을 만들고 프레임 안에 화포를 그립니다.비밀번호가 너무 많으면 스크롤 바를 만들고 있습니다.
다음에 단추와 데이터를 놓을 다른 프레임워크를 만들 것입니다.첫 번째 줄에 비밀번호를 생성하고 추가하는 두 개의 단추가 있습니다.Generate Password(암호 생성) 버튼을 클릭하면 시리즈의 first part에 구축된 암호 생성기가 호출됩니다.새 암호 추가 버튼은 VaultMethod 클래스에서 add_password() 메서드를 호출합니다.
다음 두 번째 줄에는 플랫폼, 전자메일, 사용자 이름, 비밀번호 세 개의 탭이 있습니다.그 다음에 우리는 다음 줄에 데이터베이스에서 나온 데이터를 보여야 한다.그래서 우리는 모든 데이터를 얻어야 한다.우리는while 순환과 교체기 i를 사용합니다. 모든 데이터는 array이라는 변수에 저장됩니다.패턴은 다음과 같습니다.

[(1, 'Facebook', 'ashutosh', '3ftF%IkoQJ'), (2, 'Gmail', 'ashutosh', 'Hello@123')]
만약 네가 주의한다면, 수조는 하나의 원조 목록이다.각 모듈에는 id, 플랫폼 이름, 사용자 이름/이메일, 비밀번호 네 가지 요소가 있습니다.
현재, 순환 중, 우리는 모든 순환에 해당하는 라벨을 만들고 있습니다.첫 번째 열, 즉 플랫폼 이름은 array[i][1]에 제시될 것이다.마찬가지로 두 번째 열은 array[i][2]이 제시한 사용자 이름/이메일 필드이고, 세 번째 열은 array[i][3]이 제시한 비밀번호 필드이다.매번 교체할 때마다 줄은 상응하여 바뀔 것이다.첫 번째 데이터는 세 번째 줄에 넣어야 하기 때문에row=i+3, 그 중에서 첫 번째 교체된 i=0에 쓸 수 있습니다.열마다 비밀번호 복사, 업데이트, 비밀번호 삭제 등 세 가지 단추가 있습니다.이 단추들은 같은 줄에 놓여 있지만, 열의 값은 각각 3, 4, 5이다.이러한 버튼은 VaultMethod 클래스에 정의된 메서드를 호출합니다.한 줄을 완성한 후, 우리는 i의 값을 1로 증가시켜 다음 줄로 이동할 것이다.
만약 데이터베이스에 있는 데이터 수가 i보다 작거나 같으면, 우리는 즉시 순환을 중단할 것입니다.

데모


결론


이것은 이 시리즈의 마지막 블로그다.이 프로그램에 주 비밀번호를 잊어버리는 등 더 많은 기능을 추가할 수 있습니다.이 프로그램은 Python이 설치되어 있든 없든 실행 가능한 프로그램으로 변환할 수 있습니다.이 시리즈가 마음에 드셨으면 좋겠어요!
Github 저장소 - https://github.com/ashutoshkrris/Password-Manager-using-Tkinter

좋은 웹페이지 즐겨찾기