카테고리 없음

PyQt로 구현한 프로그램(GUI) 이용해서 데이터베이스 다루기 (내용:코드, 코드설명)

improvecode 2024. 10. 8. 16:34

GUI를 통해 화면으로 데이터베이스를 추가하고 제거하는 작업을 해보자!

 

<사전작업>

PyQt를 실행하기 전에 꼭 PyQt5가 설치되어 있는지 pip list를 통해 확인하자!

설치가 되어 있지 않다면 pip install PyQt5 하기!!(*대문자, 소문자 구분하는거 중요*)

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QGridLayout, QLabel, QLineEdit, QPushButton

import sqlite3

PyQt와 데이터베이스를 사용하기 위해 필요한 모듈을 끌어다 쓰자.

class App(QMainWindow) :
    def __init__(self) :
        super().__init__()
        self.initDB()
        self.initUI()

    def initDB(self) :
        con = sqlite3.connect("fruits.db")
        cur = con.cursor()

        # 테이블이 있다면 있는거 쓰고, 없을 경우에만 새로 만들기
        cur.execute("CREATE TABLE IF NOT EXISTS fruit (name text, season text)")
        cur.close()
        con.close()

화면을 띄우기 위한 QMainWindow 클래스를 만들고, GUI와 데이터베이스 연동시키기 위해 initDB 메소드를 정의하여 파일 이름("fruits.db")과 테이블 이름("fruit")을 만들어 줍니다.

def initUI(self) :
        # 영역만들고 레이아웃 설정
        widget = QWidget()
        grid = QGridLayout()
        widget.setLayout(grid)

        # 요소 배치 : 라벨 2개 입력창 2개 버튼 2개
        
        # 라벨 2개
        grid.addWidget(QLabel("과일 :"), 0, 0)
        grid.addWidget(QLabel("계절 :"), 1, 0)

        # 입력창 2개
        self.le1 = QLineEdit()
        self.le2 = QLineEdit()
        grid.addWidget(self.le1, 0, 1)
        grid.addWidget(self.le2, 1, 1)

        # 버튼 2개
        self.btn1 = QPushButton("INSERT")
        grid.addWidget(self.btn1, 2, 1)
        # 이벤트 핸들러 함수 매칭하기
        # 클릭 되었을 때 동작할 기능의 정의
        self.btn1.clicked.connect(self.insert)

        self.btn2 = QPushButton("DELETE")
        grid.addWidget(self.btn2, 3, 1)
        self.btn2.clicked.connect(self.delete)

        # 레이아웃 설정된 영역을 메인 창에 추가하기
        self.setCentralWidget(widget)

        self.setWindowTitle('데이터베이스 프로그램')
        self.move(600, 400)
        self.show()

화면에 띄울 창에 들어갈 구조를 잡고 기능을 넣기위해 initUI 메소드를 정의하여 라벨, 입력창, 버튼을 만듭니다.

# 버튼 클릭 시 동작
    def insert(self) :
        fruit_name = self.le1.text()
        fruit_season = self.le2.text()
        con = sqlite3.connect("fruits.db")
        cur = con.cursor()
        cur.execute(f"INSERT INTO fruit VALUES ('{fruit_name}','{fruit_season}')")
        con.commit()

        cur.close()
        con.close()

    def delete(self) :
        fruit_name = self.le1.text()
        fruit_season = self.le2.text()
        con = sqlite3.connect("fruits.db")
        cur = con.cursor()
        cur.execute(f"DELETE FROM fruit WHERE name = '{fruit_name}' AND season = '{fruit_season}'")
        con.commit()

        cur.close()
        con.close()

 

버튼 클릭시 기능을 만들어 줍니다.

if __name__ == "__main__" :
    app = QApplication(sys.argv)
    view = App()
    sys.exit(app.exec_())

 

'이것이 main일 때, 화면을 띄워주겠다'라는 함수를 만들어 줍니다.

 

실행하면????

윈도우 창이 뜨는데 여기에 값을 넣어줍시다.

값 넣고 INSERT 버튼을 누르게 되면 DB Browser에 데이터가 추가 되는 것을 확인해 볼 수 있다.

반대로 삭제도 가능하다.

과일 이름과 계절을 모두 입력하여 DELETE 버튼을 누르게 되면

위 그림과 같이 감에 대한 데이터가 삭제된 것을 확인해 볼 수 있다.