# MySQL - 8.3 SQL과 파이썬 연결 - GUI 응용 프로그램

govlKH·2023년 7월 2일
0

SQL

목록 보기
17/17

MySQL - 8.3 SQL과 파이썬 연결 - GUI 응용 프로그램

윈도우 창에서 마우스 클릭만으로 데이터베이스를 입력하거나 조회할 수 있을까?
이를 실행할 수 있는 GUI 응용 프로그램을 만들어보자!

GUI(Graphical User Interface)는 윈도에 그래픽 환경으로 제공되는 화면을 통틀어서 말한다. 파이썬을 통해 윈도에 출력되는 GUI 응용 프로그램을 작성할 수 있다.

이를 도와주는 것이 tkinter라는 라이브러리이다.
tkinter를 활용하면 흔히 사용하는 엑셀, 한글, 크롬 등의 응용 프로그램과 비슷한 형태의 프로그램을 만들 수 있다. 그리고 SQL을 전혀 모르는 사용자도 마우스 클릭만으로 데이터 입력, 조회가 가능하도록 할 수 있다!

(GUI 응용 프로그램 - 혼공SQL 교재)

GUI 기본 프로그래밍

파이썬은 윈도 화면을 제공하는 다양한 방법을 제공하는데, 이 중에서 가장 기본적이고 쉽게 이용할 수 있는 윈도 생성 라이브러리인 tkinter에 대해 살펴보자!

기본 위도의 구성

  • 기본 구성
    GUI의 가장 기본적인 윈도 화면의 구성을 살펴보자
from tkinter import *

root = Tk()

# 이 부분에서 화면을 구성하고 처리한다.

root.mainloop()
  • 라벨 만들기 - 기본 화면 띄우기(타이틀, 크기, 폰트)
    이를 기반으로 한번 구성해보자
from tkinter import *

root = Tk()
root.title('혼공 GUI 연습')
root.geometry('400x200')

label1 = Label(root, text='혼공 SQL은')
label2 = Label(root, text='쉽습니다.', font=('궁서체',30), bg='blue', fg='yellow')

label1.pack()
label2.pack()

root.mainloop()

이를 통해 아래와 같은 화면을 띄울 수 있다

  • 버튼 만들기 - 메세지 박스 만들기(클릭 가능)
    이번에는 메세지 박스를 만들고 클릭할 수 있게 만들어보자!
from tkinter import *
from tkinter import messagebox

def clickButton():
    messagebox.showinfo('버튼 클릭', '버튼을 눌렀습니다.')

root = Tk()
root.title('메세지 박스 만들기')
root.geometry('200x200')

button1 = Button(root, text='여기를 클릭하세요', fg='red', bg='yellow', command=clickButton)
button1.pack(expand=1)

root.mainloop()

  • 버튼 여러 개 만들고 정렬하기
from tkinter import *

root = Tk()

button1 = Button(root, text='혼공1')
button2 = Button(root, text='혼공2')
button3 = Button(root, text='혼공3')

button1.pack(side=LEFT)
button2.pack(side=LEFT)
button3.pack(side=LEFT)

root.mainloop()

  • 버튼 여러 개 만들고 여백주기
from tkinter import *

root = Tk()

button1 = Button(root, text='혼공1')
button2 = Button(root, text='혼공2')
button3 = Button(root, text='혼공3')

button1.pack(side=TOP, fill=X, padx=10, pady=10)
button2.pack(side=TOP, fill=X, padx=10, pady=10)
button3.pack(side=TOP, fill=X, padx=10, pady=10)

root.mainloop()

  • 에디트 박스(edit box)와 리스트 박스(list box) 만들기
from tkinter import *

root = Tk()
root.geometry('200x250')

upFrame = Frame(root)
upFrame.pack()
downFrame = Frame(root)
downFrame.pack()

editBox = Entry(upFrame, width = 10, )
editBox.pack(padx = 20, pady = 20)

listbox = Listbox(downFrame, bg= 'yellow');
listbox.pack()

listbox.insert(END, '하나')
listbox.insert(END, '둘')
listbox.insert(END, '셋')

root.mainloop()

최종 버전의 GUI 프로그램 만들기

위를 기반으로 종합해서 최종 버전의 GUI 프로그램을 만들어보자!

import pymysql
from tkinter import *
from tkinter import messagebox

# 메인 코드부
def insertData():
    con, 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 = edt1.get();   data2 = edt2.get();   data3 = edt3.get();   data4 = edt4.get()
    sql = "INSERT INTO userTable VALUES('" + data1 + "', '" + data2 + "', '" + data3 + "', '" + data4 + "')"
    cur.execute(sql)
    
    conn.conmmit()
    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.title('완전한 GUI 응용 프로그램')
root.geometry('600x300')

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()

조회를 누르면

데이터 입력

profile
수학과 대학원생. 한 걸음씩 꾸준히

0개의 댓글