Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 Tkinter로 만드는 간단한 등록 폼(Registration Form) 완벽 가이드

Tkinter는 파이썬에서 GUI(그래픽 사용자 인터페이스)를 개발하기 위한 표준 라이브러리입니다. 이 라이브러리를 활용하면 윈도우 창을 비롯해 버튼, 라벨 등 다양한 UI 요소로 구성된 데스크톱 애플리케이션을 손쉽게 만들 수 있습니다.

특히 권장되는 파이썬 3.x 버전을 사용하고 있다면 Tkinter가 기본 패키지로 함께 제공되기 때문에 별도의 설치 과정 없이 바로 import해서 사용할 수 있다는 점이 큰 장점입니다.

이번 글에서는 본격적인 등록 폼을 만들기에 앞서, 먼저 간단한 GUI 애플리케이션부터 단계별로 작성해 보겠습니다.

1. 간단한 GUI 애플리케이션 만들기

아래 코드는 Tkinter를 임포트한 후 창을 생성하고 제목을 지정하는 가장 기본적인 프로그램입니다.

from tkinter import *
from tkinter import ttk
window = Tk()
window.title("Welcome to TutorialsPoint")
window.geometry('325x250')
window.configure(background = "gray")
ttk.Button(window, text="Hello, Tkinter").grid()
window.mainloop()

위 코드를 실행하면 회색 배경의 창과 함께 "Hello, Tkinter"라는 문구가 적힌 버튼이 나타납니다.

코드 상세 설명

  • 모듈 임포트: tkinter 라이브러리에서 필요한 모듈들을 가져옵니다. 여기서는 ttk와 * (전체)를 임포트했습니다.
  • window = Tk(): Tk 클래스를 사용해 애플리케이션의 메인 윈도우를 생성합니다.
  • window.title(): 윈도우 앱의 제목을 설정합니다.
  • window.geometry(): 창의 크기를 지정하며, window.configure()는 배경색을 설정합니다.
  • ttk.Button(): 버튼 위젯을 생성합니다.
  • .grid(): 버튼을 그리드(grid) 레이아웃 형식으로 배치합니다. 첫 번째 인자인 window는 생성한 창을 의미하며, text 옵션은 화면에 표시될 텍스트를 지정합니다.
  • window.mainloop(): 윈도우의 무한 루프를 호출하는 함수로, 사용자가 창을 닫을 때까지 애플리케이션이 계속 실행 상태를 유지하게 합니다.

2. 라벨과 입력 필드 추가하기

이제 앞선 예제를 확장해 보겠습니다. Label(텍스트나 이미지를 표시하는 간단한 위젯)과 Entry(사용자 입력을 받는 필드), 그리고 클릭 시 특정 동작을 수행하는 Button을 추가합니다.

from tkinter import *
from tkinter import ttk
window = Tk()
window.title("Welcome to TutorialsPoint")
window.geometry('400x400')
window.configure(background = "grey")
a = Label(window ,text = "First Name").grid(row = 0,column = 0)
b = Label(window ,text = "Last Name").grid(row = 1,column = 0)
c = Label(window ,text = "Email Id").grid(row = 2,column = 0)
d = Label(window ,text = "Contact Number").grid(row = 3,column = 0)
a1 = Entry(window).grid(row = 0,column = 1)
b1 = Entry(window).grid(row = 1,column = 1)
c1 = Entry(window).grid(row = 2,column = 1)
d1 = Entry(window).grid(row = 3,column = 1)
def clicked():
    res = "Welcome to " + txt.get()
    lbl.configure(text= res)
btn = ttk.Button(window ,text="Submit").grid(row=4,column=0)
window.mainloop()

위 코드를 실행하면 이름, 성, 이메일, 연락처를 입력할 수 있는 기본적인 등록 폼 형태의 화면이 출력됩니다. grid() 메서드의 row와 column 값을 조절하면 위젯을 원하는 위치에 자유롭게 배치할 수 있습니다.

3. 실전 예제: 대출 이자 계산기 만들기

이번에는 좀 더 실용적인 예제로 대출 이자 계산기를 만들어 보겠습니다. 이를 위해서는 원금(principal amount), 대출 금리(r), s회 납입 후 잔액(Bs) 같은 변수들이 필요합니다. s회 납입 후의 대출 잔액은 아래 공식으로 계산합니다.

Ps = ((1+r)^s × Bo) − (((1 + r)^s − 1) / r) × p

각 항목의 의미는 다음과 같습니다.

  • Rate: 연 이자율 (예: 7.5%)
  • i: 소수점 형태의 연 이자율 (rate/100)
  • r: 기간 이자율 (i/12)
  • Po: 원금
  • Ps: s회 납입 후 잔액
  • s: 월 납입 횟수
  • p: 기간(월) 납입액

아래는 Tkinter로 구현한 이자율 계산기 프로그램입니다. 팝업 창에서 사용자가 대출 금액, 금리, 납입 횟수를 입력하면 월 납입액과 남은 대출 잔액을 자동으로 계산해 줍니다.

from tkinter import *
fields = ('Annual Rate', 'Number of Payments', 'Loan Principle', 'Monthly Payment', 'Remaining Loan')
def monthly_payment(entries):
    # 기간 이자율:
    r = (float(entries['Annual Rate'].get()) / 100) / 12
    print("r", r)
    # 원금:
    loan = float(entries['Loan Principle'].get())
    n = float(entries['Number of Payments'].get())
    remaining_loan = float(entries['Remaining Loan'].get())
    q = (1 + r)** n
    monthly = r * ( (q * loan - remaining_loan) / ( q - 1 ))
    monthly = ("%8.2f" % monthly).strip()
    entries['Monthly Payment'].delete(0,END)
    entries['Monthly Payment'].insert(0, monthly )
    print("Monthly Payment: %f" % float(monthly))
def final_balance(entries):
    # 기간 이자율:
    r = (float(entries['Annual Rate'].get()) / 100) / 12
    print("r", r)
    # 원금:
    loan = float(entries['Loan Principle'].get())
    n = float(entries['Number of Payments'].get())
    q = (1 + r)** n
    monthly = float(entries['Monthly Payment'].get())
    q = (1 + r)** n
    remaining = q * loan - ( (q - 1) / r) * monthly
    remaining = ("%8.2f" % remaining).strip()
    entries['Remaining Loan'].delete(0,END)
    entries['Remaining Loan'].insert(0, remaining )
    print("Remaining Loan: %f" % float(remaining))
def makeform(root, fields):
    entries = {}
    for field in fields:
        row = Frame(root)
        lab = Label(row, width=22, text=field+": ", anchor='w')
        ent = Entry(row)
        ent.insert(0,"0")
        row.pack(side = TOP, fill = X, padx = 5 , pady = 5)
        lab.pack(side = LEFT)
        ent.pack(side = RIGHT, expand = YES, fill = X)
        entries[field] = ent
    return entries
if __name__ == '__main__':
    root = Tk()
    ents = makeform(root, fields)
    root.bind('<Return>', (lambda event, e = ents: fetch(e)))
    b1 = Button(root, text = 'Final Balance',
        command=(lambda e = ents: final_balance(e)))
    b1.pack(side = LEFT, padx = 5, pady = 5)
    b2 = Button(root, text='Monthly Payment',
    command=(lambda e = ents: monthly_payment(e)))
    b2.pack(side = LEFT, padx = 5, pady = 5)
    b3 = Button(root, text = 'Quit', command = root.quit)
    b3.pack(side = LEFT, padx = 5, pady = 5)
    root.mainloop()

실행 결과

프로그램을 실행하면 대출 금액, 금리, 납입 횟수를 입력하는 입력 필드와 함께 'Final Balance', 'Monthly Payment', 'Quit' 세 개의 버튼이 표시됩니다. 사용자는 필요한 값을 입력한 뒤 버튼을 클릭하는 것만으로 최종 잔여 대출액과 월 납입액을 손쉽게 확인할 수 있습니다.

이처럼 Tkinter를 활용하면 몇십 줄의 코드만으로도 실생활에 유용한 GUI 애플리케이션을 빠르게 구축할 수 있습니다. 등록 폼, 계산기 등 다양한 프로젝트에 응용해 보시기 바랍니다.