| 
			 import sys 
			import os 
			import sqlite3 as sq 
			from PySide6 import QtUiTools, QtGui 
			from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidgetItem 
			  
			#database 이름 설정 
			Databasename = "nametable.db" 
			 
			class MainView(QMainWindow): 
			    def __init__(self): 
			        super().__init__() 
			        self.setupUI() 
			  
			    def setupUI(self): 
			        global UI_set 
			 
			        #UI 파일 로딩 
			        UI_set = QtUiTools.QUiLoader().load(resource_path("tablewidgettest.ui")) 
			         
			        #버튼 클릭시 데이터 입력을 위해 연결할 클래스 외부 함수 
			        UI_set.pushButton.clicked.connect(InsertData) 
			         
			        #Table의 내부 셀을 클릭할 때 연결할 클래스 외부 함수 
			        #셀을 클릭하여 연결한 함수에는 기본적으로 셀의 Row, Column 두개의 인자를 넘겨준다. 
			        UI_set.tableWidget.cellClicked.connect(DeleteData) 
			                 
			        #Table 기본 세팅위해 내부 메서드 호출 
			        self.setTable() 
			                         
			        #데이터베이스 세팅을 위해 외부 함수 호출 
			        CreateTable() 
			         
			        #데이터베이스 세팅 후, DB 값 불러오기외부 함수 호출 
			        SelectData() 
			                 
			        # GUI 화면 출력 
			        self.setCentralWidget(UI_set) 
			        self.setWindowTitle("GUI Program Test") 
			        self.setWindowIcon(QtGui.QPixmap(resource_path("./images/jbmpa.png"))) 
			        self.resize(510,640) 
			        self.show() 
			         
			         
			    def setTable(self): 
			        #Table 가로(column) 갯수 
			        UI_set.tableWidget.setColumnCount(4) 
			         
			        #Table 칼럼 헤더 라벨 
			        UI_set.tableWidget.setHorizontalHeaderLabels(['번호','이름','나이','삭제']) 
			  
			def CreateTable(): 
			    #sqlite3 db 파일 접속, 없으면 생성 
			    conn = sq.connect(Databasename) 
			    cur = conn.cursor() 
			     
			    #db에 aaa라는 테이블이 있는지 sqlite3의 마스터 테이블에서 정보를 받아온다. 
			    sql = "SELECT name FROM sqlite_master WHERE type='table' AND name ='aaa'" 
			    cur.execute(sql) 
			    rows = cur.fetchall() 
			         
			    #aaa 테이블이 없으면 새로 생성하고,  있으면 통과 
			    if not rows:         
			        sql = "CREATE TABLE aaa (idx INTEGER PRIMARY KEY, name TEXT, age INTEGER)" 
			        cur.execute(sql) 
			        conn.commit() 
			     
			    conn.close() 
			     
			def InsertData(): 
			    #두개의 lineEdit에서 각각 이름과 나이를 받아온다.   
			    name = UI_set.lineEdit.text() 
			    age = UI_set.lineEdit_2.text() 
			     
			    conn = sq.connect(Databasename) 
			    cur = conn.cursor() 
			     
			    sql = "INSERT INTO aaa (name, age) VALUES (?,?)" 
			    cur.execute(sql, (name, age)) 
			    conn.commit() 
			     
			    conn.close() 
			     
			    #데이터 입력 후 DB의 내용 불러와서 TableWidget에 넣기 위한 함수 호출 
			    SelectData() 
			     
			     
			def DeleteData(row, column): 
			    #테이블 내부의 셀 클릭과 연결된 이벤트는 기본적으로 셀의 Row, Column을 인자로써 전달받는다. 
			     
			    #삭제 셀이 눌렸을 때, 삭제 셀은 4번째 셀이므로 column 값이 3일 경우만 작동한다. 
			    if column == 3:  
			        conn = sq.connect(Databasename) 
			        cur = conn.cursor() 
			         
			        #DB의 데이터 idx는 선택한 Row의 첫번째 셀(0번 Column)의 값에 해당한다. 
			        idx = UI_set.tableWidget.item(row, 0).text() 
			         
			        sql = "DELETE FROM aaa WHERE idx =?" 
			        cur.execute(sql, (idx,)) 
			        conn.commit() 
			         
			        conn.close() 
			         
			        #데이터 삭제 후 DB의 내용 불러와서 TableWidget에 넣기 위한 함수 호출 
			        SelectData() 
			     
			def SelectData(): 
			    #데이터베이스 내부 테이블의 내용을 모두 추출 
			    conn = sq.connect(Databasename) 
			    cur = conn.cursor() 
			     
			    sql = "SELECT * FROM aaa" 
			    cur.execute(sql) 
			    rows = cur.fetchall()         
			     
			    conn.close() 
			     
			    #DB의 내용을 불러와서 TableWidget에 넣기 위한 함수 호출 
			    setTables(rows) 
			 
			def setTables(row): 
			    #DB내부에 저장된 결과물의 갯수를 저장한다.         
			    count = len(row) 
			     
			    #갯수만큼 테이블의 Row를 생성한다. 
			    UI_set.tableWidget.setRowCount(count) 
			     
			    #row 리스트만큼 반복하며 Table에 DB 값을 넣는다. 
			    for x in range(count): 
			        #리스트 내부의 column쌍은 튜플로 반환하므로 튜플의 각 값을 변수에 저장 
			        idx, name, age = row[x] 
			            
			        #테이블의 각 셀에 값 입력 
			        UI_set.tableWidget.setItem(x, 0, QTableWidgetItem(str(idx))) 
			        UI_set.tableWidget.setItem(x, 1, QTableWidgetItem(name)) 
			        UI_set.tableWidget.setItem(x, 2, QTableWidgetItem(str(age))) 
			        UI_set.tableWidget.setItem(x, 3, QTableWidgetItem("삭제"))         
			     
			        
			#파일 경로 
			#pyinstaller로 원파일로 압축할때 경로 필요함 
			def resource_path(relative_path): 
			    if hasattr(sys, '_MEIPASS'): 
			        return os.path.join(sys._MEIPASS, relative_path) 
			    return os.path.join(os.path.abspath("."), relative_path) 
			  
			if __name__ == '__main__': 
			    app = QApplication(sys.argv) 
			    main = MainView() 
			    #main.show() 
			    sys.exit(app.exec()) 
			 |