Notice
Recent Posts
Recent Comments
«   2026/08   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

Don't forget to smile

[혼자 공부하는 SQL] Chapter 8-3. GUI 응용 프로그램 본문

SQL

[혼자 공부하는 SQL] Chapter 8-3. GUI 응용 프로그램

에르더그 2023. 1. 5. 04:51

GUI(Graphical User Interface) : 윈도우에 그래픽으로 제공되는 모든 화면을 통틀어서 이르는 말

tkinter : 엑셀, 한글, 크롬 등의 응용 프로그램과 비슷한 형태의 프로그램을 작성하도록 도와주는 라이브러리

<GUI 기본 프로그래밍>

 

1) 위 코드는 tkinter 라이브러리의 가장 기본적인 화면 구성을 나타낸 코드

Tk()는 기본이 되는 윈도우를 반환하며, mainloop() 함수 내에서 코드를 처리

 

2) title() 함수는 윈도우의 제목, geometry() 함수는 윈도우의 크기를 결정

<기본 위젯>

 

1) 문자를 표현할 수 있는 위젯인 라벨(label)을 사용 가능

Label(부모윈도우, 옵션...) 형식으로 사용하며 반드시 pack() 함수를 사용해야 화면에 표시

 

2) 마우스로 클릭하면 지정된 작업이 수행되는 버튼(button)을 사용 가능

Button(부모윈도우, 옵션...) 형식으로 사용하며 마찬가지로 pack() 함수를 사용해야 화면에 표시

이 때 command 옵션으로 반드시 버튼이 눌려졌을 때의 작업을 지정해야 함

 

3) pack() 함수의 옵션 중 LEFT를 선택하면 좌측, RIGHT를 선택하면 우측,

TOP 또는 BOTTOM 옵션 사용 시 수직으로 정렬 가능

 

4) pack() 함수에 padx 또는 pady의 픽셀값 부여 시 위젯 사이에 여백 설정 가능

 

5) 화면을 여러 구역으로 나누는 프레임(frame), 입력 상자를 표시하는 엔트리(entry), 목록을 표시하는 리스트(list)

역시 모두 GUI 프로그래밍을 구성하는 기본 위젯

 

<완전한 형태의 GUI 응용 프로그래밍>

import pymysql
from tkinter import *
from tkinter import messagebox

##함수 코드부
def insertData():
    conn, cur = None, None
    data1, data2, data3, data4 = "", "", "", ""
    sql = ""

    conn = pymysql.connect(host = '127.0.0.1', user = 'root', password = '0000', db = 'soloDB', charset = 'utf8')
    cur = conn.cursor()

    data1 = edit1.get(); data2 = edit2.get()
    data3 = edit3.get(); data4 = edit4.get()
    sql = "INSERT INTO userTable VALUES('" + data1 + "', '" + data2 + "', '" + data3 + "', " + data4 + ")"
    cur.execute(sql)

    conn.commit()
    conn.close()

    messagebox.showinfo('성공', '데이터 입력 성공')

def selectData():
    strData1, strData2, strData3, strData4 = [], [], [], []

    conn = pymysql.connect(host = '127.0.0.1', user = 'root', password = '0000', db = 'soloDB', charset = 'utf8')
    cur = conn.cursor()
    cur.execute("SELECT * FROM userTable")

    strData1.append("사용자 ID"); strData2.append("사용자 이름")
    strData3.append("사용자 이메일"); strData4.append("사용자 출생연도")
    strData1.append("----------"); strData2.append("----------")
    strData3.append("----------"); strData4.append("----------")

    while(True):
        row = cur.fetchone()
        if row == None:
            break;
        strData1.append(row[0]); strData2.append(row[1])
        strData3.append(row[2]); strData4.append(row[3])

        listData1.delete(0, listData1.size() - 1)
        listData2.delete(0, listData2.size() - 1)
        listData3.delete(0, listData3.size() - 1)
        listData4.delete(0, listData4.size() - 1)

        for item1, item2, item3, item4 in zip(strData1, strData2, strData3, strData4):
            listData1.insert(END, item1);  listData2.insert(END, item2);
            listData3.insert(END, item3);  listData4.insert(END, item4);
            
        conn.close()

##위젯 코드부

        root = Tk()
        root.geometry("600x300")
        root.title("완전한 GUI 응용 프로그램")

        edtFrame = Frame(root);
        edtFrame.pack()
        listFrame = Frame(root)
        listFrame.pack(side = BOTTOM, fill = BOTH, expand = 1)

        edt1 = Entry(edtFrame, width = 10); edt1.pack(side = LEFT, padx = 10, pady = 10)
        edt2 = Entry(edtFrame, width = 10); edt2.pack(side = LEFT, padx = 10, pady = 10)
        edt3 = Entry(edtFrame, width = 10); edt3.pack(side = LEFT, padx = 10, pady = 10)
        edt4 = Entry(edtFrame, width = 10); edt4.pack(side = LEFT, padx = 10, pady = 10)

        btnInsert = Button(edtFrame, text = "입력", command = insertData)
        btnInsert.pack(side = LEFT, padx = 10, pady = 10)
        btnSelect = Button(edtFrame, text = "조회", command = selectData)
        btnSelect.pack(side = LEFT, padx = 10, pady = 10)

        listData1 = Listbox(listFrame, bg = 'yellow');
        listData1.pack(side = LEFT, fill = BOTH, expand = 1)
        listData2 = Listbox(listFrame, bg = 'yellow');
        listData2.pack(side = LEFT, fill = BOTH, expand = 1)
        listData3 = Listbox(listFrame, bg = 'yellow');
        listData3.pack(side = LEFT, fill = BOTH, expand = 1)
        listData4 = Listbox(listFrame, bg = 'yellow');
        listData4.pack(side = LEFT, fill = BOTH, expand = 1)

        root.mainloop()

1) 지금까지 배운 MySQL과 Python의 연동, GUI 프로그래밍을 이용하여 데이터를 입력하는 프로그램을 작성할 수 있음