forked from papasmf1/ChatGPTPython
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Chap10_ProductList.py
123 lines (102 loc) · 4.5 KB
/
Chap10_ProductList.py
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import pyqtSlot, Qt
from PyQt5 import uic
import sqlite3
import os.path
#DB파일이 없으면 만들고 있다면 접속한다.
if os.path.exists("ProductList.db"):
con = sqlite3.connect("ProductList.db")
cur = con.cursor()
else:
con = sqlite3.connect("ProductList.db")
cur = con.cursor()
cur.execute(
"create table Products (id integer primary key autoincrement, Name text, Price integer);")
#디자인 파일을 로딩
form_class = uic.loadUiType("Chap09_ProductList.ui")[0]
class DemoForm(QMainWindow, form_class):
def __init__(self):
super().__init__()
self.setupUi(self)
#초기값 셋팅
self.id = 0
self.name = ""
self.price = 0
#QTableWidget의 컬럼폭 셋팅하기
self.tableWidget.setColumnWidth(0, 100)
self.tableWidget.setColumnWidth(1, 200)
self.tableWidget.setColumnWidth(2, 100)
#QTableWidget의 헤더 셋팅하기
self.tableWidget.setHorizontalHeaderLabels(["제품ID","제품명", "가격"])
#QTableWidget의 컬럼 정렬하기
#self.tableWidget.horizontalHeaderItem(0).setTextAlignment(Qt.AlignRight)
#self.tableWidget.horizontalHeaderItem(2).setTextAlignment(Qt.AlignRight)
#탭키로 네비게이션 금지
self.tableWidget.setTabKeyNavigation(False)
#엔터키를 클릭하면 다음 컨트롤로 이동하는 경우
self.prodID.returnPressed.connect(lambda: self.focusNextChild())
self.prodName.returnPressed.connect(lambda: self.focusNextChild())
self.prodPrice.returnPressed.connect(lambda: self.focusNextChild())
#더블클릭 시그널 처리
self.tableWidget.doubleClicked.connect(self.doubleClick)
def addProduct(self):
#입력 파라메터 처리
self.name = self.prodName.text()
self.price = self.prodPrice.text()
cur.execute("insert into Products (Name, Price) values(?,?);",
(self.name, self.price))
#리프레시
self.getProduct()
#입력,수정,삭제 작업후에는 커밋을 한다.
con.commit()
def updateProduct(self):
#업데이트 작업시 파라메터 처리
self.id = self.prodID.text()
self.name = self.prodName.text()
self.price = self.prodPrice.text()
cur.execute("update Products set name=?, price=? where id=?;",
(self.name, self.price, self.id))
#리프레시
self.getProduct()
#입력,수정,삭제 작업후에는 커밋을 한다.
con.commit()
def removeProduct(self):
#삭제 파라메터 처리
self.id = self.prodID.text()
strSQL = "delete from Products where id=" + str(self.id)
cur.execute(strSQL)
#리프레시
self.getProduct()
#입력,수정,삭제 작업후에는 커밋을 한다.
con.commit()
def getProduct(self):
#검색 결과를 보여주기전에 기존 컨텐트를 삭제(헤더는 제외)
self.tableWidget.clearContents()
cur.execute("select * from Products;")
#행숫자 카운트
row = 0
for item in cur:
int_as_strID = "{:10}".format(item[0])
int_as_strPrice = "{:10}".format(item[2])
#각 열을 Item으로 생성해서 숫자를 오른쪽으로 정렬해서 출력한다.
itemID = QTableWidgetItem(int_as_strID)
itemID.setTextAlignment(Qt.AlignRight)
self.tableWidget.setItem(row, 0, itemID)
#제품명은 그대로 출력한다.
self.tableWidget.setItem(row, 1, QTableWidgetItem(item[1]))
#각 열을 Item으로 생성해서 숫자를 오른쪽으로 정렬해서 출력한다.
itemPrice = QTableWidgetItem(int_as_strPrice)
itemPrice.setTextAlignment(Qt.AlignRight)
self.tableWidget.setItem(row, 2, itemPrice)
row += 1
print("row: ", row)
def doubleClick(self):
self.prodID.setText(self.tableWidget.item(self.tableWidget.currentRow(), 0).text())
self.prodName.setText(self.tableWidget.item(self.tableWidget.currentRow(), 1).text())
self.prodPrice.setText(self.tableWidget.item(self.tableWidget.currentRow(), 2).text())
if __name__ == "__main__":
app = QApplication(sys.argv)
demoForm = DemoForm()
demoForm.show()
app.exec_()