윈도우 창에서 마우스 클릭만으로 데이터베이스를 입력하거나 조회할 수 있을까?
이를 실행할 수 있는 GUI 응용 프로그램을 만들어보자!
GUI(Graphical User Interface)는 윈도에 그래픽 환경으로 제공되는 화면을 통틀어서 말한다. 파이썬을 통해 윈도에 출력되는 GUI 응용 프로그램을 작성할 수 있다.
이를 도와주는 것이 tkinter라는 라이브러리이다.
tkinter를 활용하면 흔히 사용하는 엑셀, 한글, 크롬 등의 응용 프로그램과 비슷한 형태의 프로그램을 만들 수 있다. 그리고 SQL을 전혀 모르는 사용자도 마우스 클릭만으로 데이터 입력, 조회가 가능하도록 할 수 있다!
(GUI 응용 프로그램 - 혼공SQL 교재)
파이썬은 윈도 화면을 제공하는 다양한 방법을 제공하는데, 이 중에서 가장 기본적이고 쉽게 이용할 수 있는 윈도 생성 라이브러리인 tkinter에 대해 살펴보자!
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()
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 프로그램을 만들어보자!
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()
조회를 누르면
데이터 입력