1 import sys,os
2 from PyQt5.QtWidgets import *
3 from PyQt5.QtGui import *
4 from PyQt5.QtCore import Qt
5 import sqlite3
6 import addproduct,addmember,sellings,style
7 from PIL import Image
8
9 con=sqlite3.connect("products.db")
10 cur=con.cursor()
11
12
13 #gui python
14 class Main(QMainWindow):
15 def __init__(self):
16 super().__init__()
17 self.setWindowTitle("Product Manager")
18 self.setWindowIcon(QIcon('icons/icon.ico'))
19 self.setGeometry(450,150,1350,750)
20 self.setFixedSize(self.size())
21
22 self.UI()
23 self.show()
24 def toolBar(self):
25 self.tb=self.addToolBar("Tool Bar")
26 self.tb.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
27 #####################Toolbar Buttons############
28 ####################Add Product################
29 self.addProduct=QAction(QIcon('icons/add.png'),"Add Product",self)
30 self.tb.addAction(self.addProduct)
31 self.addProduct.triggered.connect(self.funcAddProduct)
32 self.tb.addSeparator()
33 ######################Add Member################
34 self.addMember=QAction(QIcon('icons/users.png'),"Add Member",self)
35 self.tb.addAction(self.addMember)
36 self.addMember.triggered.connect(self.funcAddMember)
37 self.tb.addSeparator()
38 ######################Sell Products###############
39 self.sellProduct = QAction(QIcon('icons/sell.png'),"Sell Product",self)
40 self.tb.addAction(self.sellProduct)
41 self.sellProduct.triggered.connect(self.funcSellProducts)
42 self.tb.addSeparator()
43
44
45
46
47
48 def tabWigdet(self):
49 self.tabs=QTabWidget()
50 self.tabs.blockSignals(True)
51 self.tabs.currentChanged.connect(self.tabChanged)
52 self.setCentralWidget(self.tabs)
53 self.tab1=QWidget()
54 self.tab2=QWidget()
55 self.tab3=QWidget()
56 self.tabs.addTab(self.tab1,"Products")
57 self.tabs.addTab(self.tab2,"Members")
58 self.tabs.addTab(self.tab3,"Statistics")
59 def UI(self):
60 self.toolBar()
61 self.tabWigdet()
62 self.widgets()
63 self.layouts()
64 self.displayProducts()
65 self.displayMembers()
66 self.getStatistics()
67
68
69 def widgets(self):
70 #######################Tab1 Widgets###############
71 ####################Main left layout widget##########
72 self.productsTable = QTableWidget()
73 self.productsTable.setColumnCount(6)
74 self.productsTable.setColumnHidden(0,True)
75 self.productsTable.setHorizontalHeaderItem(0,QTableWidgetItem("Product Id"))
76 self.productsTable.setHorizontalHeaderItem(1,QTableWidgetItem("Product Name"))
77 self.productsTable.setHorizontalHeaderItem(2,QTableWidgetItem("Manufacturer"))
78 self.productsTable.setHorizontalHeaderItem(3,QTableWidgetItem("Price"))
79 self.productsTable.setHorizontalHeaderItem(4,QTableWidgetItem("Qouta"))
80 self.productsTable.setHorizontalHeaderItem(5,QTableWidgetItem("Availbility"))
81 self.productsTable.horizontalHeader().setSectionResizeMode(1,QHeaderView.Stretch)
82 self.productsTable.horizontalHeader().setSectionResizeMode(2,QHeaderView.Stretch)
83 self.productsTable.doubleClicked.connect(self.selectedProduct)
84
85
86 ########################Right top layout widgets#######################
87 self.searchText=QLabel("Search")
88 self.searchEntry=QLineEdit()
89 self.searchEntry.setPlaceholderText("Search For Products")
90 self.searchButton=QPushButton("Search")
91 self.searchButton.clicked.connect(self.searchProducts)
92 self.searchButton.setStyleSheet(style.searchButtonStyle())
93 ##########################Right middle layout widgets###########
94 self.allProducts=QRadioButton("All Products")
95 self.avaialableProducts=QRadioButton("Available")
96 self.notAvaialableProducts=QRadioButton("Not Available")
97 self.listButton=QPushButton("List")
98 self.listButton.clicked.connect(self.listProducts)
99 self.listButton.setStyleSheet(style.listButtonStyle())
100 ########################Tab2 Widgets#########################
101 self.membersTable=QTableWidget()
102 self.membersTable.setColumnCount(4)
103 self.membersTable.setHorizontalHeaderItem(0,QTableWidgetItem("Member ID"))
104 self.membersTable.setHorizontalHeaderItem(1,QTableWidgetItem("Member Name"))
105 self.membersTable.setHorizontalHeaderItem(2,QTableWidgetItem("Member Surname"))
106 self.membersTable.setHorizontalHeaderItem(3,QTableWidgetItem("Phone"))
107 self.membersTable.horizontalHeader().setSectionResizeMode(1,QHeaderView.Stretch)
108 self.membersTable.horizontalHeader().setSectionResizeMode(2,QHeaderView.Stretch)
109 self.membersTable.horizontalHeader().setSectionResizeMode(3,QHeaderView.Stretch)
110 self.membersTable.doubleClicked.connect(self.selectedMember)
111 self.memberSearchText=QLabel("Search Members")
112 self.memberSearchEntry=QLineEdit()
113 self.memberSearchButton=QPushButton("Search")
114 self.memberSearchButton.clicked.connect(self.searchMembers)
115 ##########################Tab3 widgets#####################
116 self.totalProductsLabel=QLabel()
117 self.totalMemberLabel=QLabel()
118 self.soldProductsLabel=QLabel()
119 self.totalAmountLabel=QLabel()
120
121
122
123
124
125 def layouts(self):
126 ######################Tab1 layouts##############
127 self.mainLayout=QHBoxLayout()
128 self.mainLeftLayout=QVBoxLayout()
129 self.mainRightLayout=QVBoxLayout()
130 self.rightTopLayout=QHBoxLayout()
131 self.rightMiddleLayout=QHBoxLayout()
132 self.topGroupBox=QGroupBox("Search Box")
133 self.topGroupBox.setStyleSheet(style.searchBoxStyle())
134 self.middleGroupBox=QGroupBox("List Box")
135 self.middleGroupBox.setStyleSheet(style.listBoxStyle())
136 self.bottomGroupBox=QGroupBox()
137 #################Add widgets###################
138 ################Left main layout widget###########
139 self.mainLeftLayout.addWidget(self.productsTable)
140 ########################Right top layout widgets#########
141 self.rightTopLayout.addWidget(self.searchText)
142 self.rightTopLayout.addWidget(self.searchEntry)
143 self.rightTopLayout.addWidget(self.searchButton)
144 self.topGroupBox.setLayout(self.rightTopLayout)
145 #################Right middle layout widgets##########
146 self.rightMiddleLayout.addWidget(self.allProducts)
147 self.rightMiddleLayout.addWidget(self.avaialableProducts)
148 self.rightMiddleLayout.addWidget(self.notAvaialableProducts)
149 self.rightMiddleLayout.addWidget(self.listButton)
150 self.middleGroupBox.setLayout(self.rightMiddleLayout)
151
152 self.mainRightLayout.addWidget(self.topGroupBox,20)
153 self.mainRightLayout.addWidget(self.middleGroupBox,20)
154 self.mainRightLayout.addWidget(self.bottomGroupBox,60)
155 self.mainLayout.addLayout(self.mainLeftLayout,70)
156 self.mainLayout.addLayout(self.mainRightLayout,30)
157 self.tab1.setLayout(self.mainLayout)
158 ######################Tab2 Layouts#####################
159 self.memberMainLayout=QHBoxLayout()
160 self.memberLeftLayout=QHBoxLayout()
161 self.memberRightLayout=QHBoxLayout()
162 self.memberRightGroupBox=QGroupBox("Search For Members")
163 self.memberRightGroupBox.setContentsMargins(10,10,10,600)
164 self.memberRightLayout.addWidget(self.memberSearchText)
165 self.memberRightLayout.addWidget(self.memberSearchEntry)
166 self.memberRightLayout.addWidget(self.memberSearchButton)
167 self.memberRightGroupBox.setLayout(self.memberRightLayout)
168
169 self.memberLeftLayout.addWidget(self.membersTable)
170 self.memberMainLayout.addLayout(self.memberLeftLayout,70)
171 self.memberMainLayout.addWidget(self.memberRightGroupBox,30)
172 self.tab2.setLayout(self.memberMainLayout)
173
174 #####################Tab3 layouts########################
175 self.statisticsMainLayout=QVBoxLayout()
176 self.statisticsLayout=QFormLayout()
177 self.statisticsGroupBox=QGroupBox("Statistics")
178 self.statisticsLayout.addRow("Total Products:",self.totalProductsLabel)
179 self.statisticsLayout.addRow("Total Member:",self.totalMemberLabel)
180 self.statisticsLayout.addRow("Sold Products:",self.soldProductsLabel)
181 self.statisticsLayout.addRow("Total Amount:",self.totalAmountLabel)
182
183 self.statisticsGroupBox.setLayout(self.statisticsLayout)
184 self.statisticsGroupBox.setFont(QFont("Arial",20))
185 self.statisticsMainLayout.addWidget(self.statisticsGroupBox)
186 self.tab3.setLayout(self.statisticsMainLayout)
187 self.tabs.blockSignals(False)
188
189
190
191 def funcAddProduct(self):
192 self.newProduct=addproduct.AddProduct()
193
194 def funcAddMember(self):
195 self.newMember=addmember.AddMember()
196
197 def displayProducts(self):
198 self.productsTable.setFont(QFont("Times",12))
199 for i in reversed(range(self.productsTable.rowCount())):
200 self.productsTable.removeRow(i)
201
202 query = cur.execute("SELECT
product_id,product_name,product_manufacturer,product_price,product_qouta,product_
availability FROM products")
203 for row_data in query:
204 row_number = self.productsTable.rowCount()
205 self.productsTable.insertRow(row_number)
206 for column_number, data in enumerate(row_data):
207
self.productsTable.setItem(row_number,column_number,QTableWidgetItem(str(
data)))
208
209 self.productsTable.setEditTriggers(QAbstractItemView.NoEditTriggers)
210
211
212 def displayMembers(self):
213 self.membersTable.setFont(QFont("Times",12))
214 for i in reversed(range(self.membersTable.rowCount())):
215 self.membersTable.removeRow(i)
216
217 members=cur.execute("SELECT * FROM members")
218 for row_data in members:
219 row_number = self.membersTable.rowCount()
220 self.membersTable.insertRow(row_number)
221 for column_number, data in enumerate(row_data):
222
self.membersTable.setItem(row_number,column_number,QTableWidgetItem(str(d
ata)))
223
224 self.membersTable.setEditTriggers(QAbstractItemView.NoEditTriggers)
225
226
227 def selectedProduct(self):
228 global productId
229 listProduct=[]
230 for i in range(0,6):
231
listProduct.append(self.productsTable.item(self.productsTable.currentRow(),i)
.text())
232
233 productId=listProduct[0]
234 self.display=DisplayProduct()
235 self.display.show()
236
237 def selectedMember(self):
238 global memberId
239 listMember=[]
240 for i in range(0,4):
241
listMember.append(self.membersTable.item(self.membersTable.currentRow(),i).te
xt())
242
243 memberId=listMember[0]
244 self.displayMember=DisplayMember()
245 self.displayMember.show()
246
247 def searchProducts(self):
248 value=self.searchEntry.text()
249 if value == "":
250 QMessageBox.information(self,"Warning","Search query cant be empty!!!")
251
252 else:
253 self.searchEntry.setText("")
254
255 query=("SELECT
product_id,product_name,product_manufacturer,product_price,product_qouta,prod
uct_availability FROM products WHERE product_name LIKE ? or
product_manufacturer LIKE ?")
256 results=cur.execute(query,('%' + value + '%','%' + value + '%')).fetchall()
257 print(results)
258
259 if results == []:
260 QMessageBox.information(self,"Warning","There is no such a product or
manufacturer")
261
262 else:
263 for i in reversed(range(self.productsTable.rowCount())):
264 self.productsTable.removeRow(i)
265
266 for row_data in results:
267 row_number = self.productsTable.rowCount()
268 self.productsTable.insertRow(row_number)
269 for column_number, data in enumerate(row_data):
270
self.productsTable.setItem(row_number,column_number,QTableWidgetI
tem(str(data)))
271
272 def searchMembers(self):
273 value = self.memberSearchEntry.text()
274 if value == "":
275 QMessageBox.information(self,"Warning","Search query can not be empty")
276
277 else:
278 self.memberSearchEntry.setText("")
279 query=("SELECT * FROM members WHERE member_name LIKE ? or member_surname
LIKE ? or member_phone LIKE ?")
280 results=cur.execute(query,('%' + value + '%', '%' + value + '%', '%' +
value + '%')).fetchall()
281 if results == []:
282 QMessageBox.information(self,"Warning","There is no such a member")
283 else:
284 for i in reversed(range(self.membersTable.rowCount())):
285 self.membersTable.removeRow(i)
286
287 for row_data in results:
288 row_number = self.membersTable.rowCount()
289 self.membersTable.insertRow(row_number)
290 for column_number, data in enumerate(row_data):
291 self.membersTable.setItem(row_number, column_number,
QTableWidgetItem(str(data)))
292
293
294
295 def listProducts(self):
296 if self.allProducts.isChecked() == True:
297 self.displayProducts()
298
299 elif self.avaialableProducts.isChecked():
300 query=("SELECT
product_id,product_name,product_manufacturer,product_price,product_qouta,"
301 "product_availability FROM products WHERE
product_availability='Available'")
302 products=cur.execute(query).fetchall()
303 print(products)
304
305 for i in reversed(range(self.productsTable.rowCount())):
306 self.productsTable.removeRow(i)
307
308 for row_data in products:
309 row_number = self.productsTable.rowCount()
310 self.productsTable.insertRow(row_number)
311 for column_number, data in enumerate(row_data):
312 self.productsTable.setItem(row_number, column_number,
QTableWidgetItem(str(data)))
313
314 elif self.notAvaialableProducts.isChecked():
315 query = ("SELECT
product_id,product_name,product_manufacturer,product_price,product_qouta,"
316 "product_availability FROM products WHERE
product_availability='UnAvailable'")
317 products = cur.execute(query).fetchall()
318 print(products)
319
320 for i in reversed(range(self.productsTable.rowCount())):
321 self.productsTable.removeRow(i)
322
323 for row_data in products:
324 row_number = self.productsTable.rowCount()
325 self.productsTable.insertRow(row_number)
326 for column_number, data in enumerate(row_data):
327 self.productsTable.setItem(row_number, column_number,
QTableWidgetItem(str(data)))
328
329
330 def funcSellProducts(self):
331 self.sell = sellings.SellProducts()
332
333
334 def getStatistics(self):
335 countProducts=cur.execute("SELECT count(product_id) FROM products").fetchall()
336 countMembers = cur.execute("SELECT count(member_id) FROM members").fetchall()
337 soldProducts = cur.execute("SELECT SUM(selling_quantity) FROM
sellings").fetchall()
338 totalAmount = cur.execute("SELECT SUM(selling_amount) FROM sellings").fetchall()
339 totalAmount = totalAmount[0][0]
340 soldProducts = soldProducts[0][0]
341 countMembers = countMembers[0][0]
342 countProducts = countProducts[0][0]
343 self.totalProductsLabel.setText(str(countProducts))
344 self.totalMemberLabel.setText(str(countMembers))
345 self.soldProductsLabel.setText(str(soldProducts))
346 self.totalAmountLabel.setText(str(totalAmount)+" $")
347
348 def tabChanged(self):
349 self.getStatistics()
350 self.displayProducts()
351 self.displayMembers()
352
353
354
355 class DisplayMember(QWidget):
356 def __init__(self):
357 super().__init__()
358 self.setWindowTitle("Member Details")
359 self.setWindowIcon(QIcon('icons/icon.ico'))
360 self.setGeometry(450,150,350,600)
361 self.setFixedSize(self.size())
362 self.UI()
363 self.show()
364
365 def UI(self):
366 self.memberDetails()
367 self.widgets()
368 self.layouts()
369
370
371 def memberDetails(self):
372 global memberId
373 query=("SELECT * FROM members WHERE member_id=?")
374 member=cur.execute(query,(memberId,)).fetchone()
375 self.memberName=member[1]
376 self.memberSurname=member[2]
377 self.memberPhone=member[3]
378
379 def widgets(self):
380 ###############Widgets of top layout############
381 self.memberImg=QLabel()
382 self.img=QPixmap('icons/members.png')
383 self.memberImg.setPixmap(self.img)
384 self.memberImg.setAlignment(Qt.AlignCenter)
385 self.titleText=QLabel("Display Member")
386 self.titleText.setAlignment(Qt.AlignCenter)
387 ###################widgets of bottom layout#########
388 self.nameEntry=QLineEdit()
389 self.nameEntry.setText(self.memberName)
390 self.surnameEntry=QLineEdit()
391 self.surnameEntry.setText(self.memberSurname)
392 self.phoneEntry=QLineEdit()
393 self.phoneEntry.setText(self.memberPhone)
394 self.updateBtn=QPushButton("Update")
395 self.updateBtn.clicked.connect(self.updateMember)
396 self.deleteBtn=QPushButton("Delete")
397 self.deleteBtn.clicked.connect(self.deleteMember)
398
399
400
401 def layouts(self):
402 self.mainLayout=QVBoxLayout()
403 self.topLayout=QVBoxLayout()
404 self.bottomLayout=QFormLayout()
405 self.topFrame=QFrame()
406 self.topFrame.setStyleSheet(style.memberTopFrame())
407 self.bottomFrame=QFrame()
408 self.bottomFrame.setStyleSheet(style.memberBottomFrame())
409 ##############add widgets######3
410 self.topLayout.addWidget(self.titleText)
411 self.topLayout.addWidget(self.memberImg)
412 self.topFrame.setLayout(self.topLayout)
413
414 self.bottomLayout.addRow(QLabel("Name: "),self.nameEntry)
415 self.bottomLayout.addRow(QLabel("Surname: "),self.surnameEntry)
416 self.bottomLayout.addRow(QLabel("Phone: "),self.phoneEntry)
417 self.bottomLayout.addRow(QLabel(""),self.updateBtn)
418 self.bottomLayout.addRow(QLabel(""),self.deleteBtn)
419 self.bottomFrame.setLayout(self.bottomLayout)
420
421 self.mainLayout.addWidget(self.topFrame)
422 self.mainLayout.addWidget(self.bottomFrame)
423 self.setLayout(self.mainLayout)
424
425
426 def deleteMember(self):
427 global memberId
428 mbox=QMessageBox.question(self,"Warning","Are you sure to delete this
member",QMessageBox.Yes|QMessageBox.No,QMessageBox.No)
429
430 if mbox == QMessageBox.Yes:
431 try:
432 query="DELETE FROM members WHERE member_id=?"
433 cur.execute(query,(memberId,))
434 con.commit()
435 QMessageBox.information(self,"Info","Member has been deleted!")
436 except:
437 QMessageBox.information(self,"Info","Member has not been deleted!")
438
439
440 def updateMember(self):
441 global memberId
442 name = self.nameEntry.text()
443 surname = self.surnameEntry.text()
444 phone = self.phoneEntry.text()
445
446 if (name and surname and phone !=""):
447 try:
448 query="UPDATE members set member_name=?, member_surname=?,
member_phone=? WHERE member_id=?"
449 cur.execute(query,(name,surname,phone,memberId))
450 con.commit()
451 QMessageBox.information(self,"Info","Member has been updated!")
452
453 except:
454 QMessageBox.information(self,"Info","Member has been updated!")
455
456 else:
457 QMessageBox.information(self, "Info", "Fields can not be empty!")
458
459 class DisplayProduct(QWidget):
460 def __init__(self):
461 super().__init__()
462 self.setWindowTitle("Product Details")
463 self.setWindowIcon(QIcon('icons/icon.ico'))
464 self.setGeometry(450,150,350,600)
465 self.setFixedSize(self.size())
466 self.UI()
467 self.show()
468
469 def UI(self):
470 self.productDetails()
471 self.widgets()
472 self.layouts()
473
474
475 def productDetails(self):
476 global productId
477 query=("SELECT * FROM products WHERE product_id=?")
478 product=cur.execute(query,(productId,)).fetchone()#single item tuple=(1,)
479 self.productName=product[1]
480 self.productManufacturer=product[2]
481 self.productPrice=product[3]
482 self.productQouta=product[4]
483 self.productImg=product[5]
484 self.productStatus=product[6]
485
486 def widgets(self):
487 #################Top layouts wigdets#########
488 self.product_Img=QLabel()
489 self.img=QPixmap('img/{}'.format(self.productImg))
490 self.product_Img.setPixmap(self.img)
491 self.product_Img.setAlignment(Qt.AlignCenter)
492 self.titleText=QLabel("Update Product")
493 self.titleText.setAlignment(Qt.AlignCenter)
494
495 ##############Bottom Layout's widgets###########
496 self.nameEntry=QLineEdit()
497 self.nameEntry.setText(self.productName)
498 self.manufacturerEntry=QLineEdit()
499 self.manufacturerEntry.setText(self.productManufacturer)
500 self.priceEntry=QLineEdit()
501 self.priceEntry.setText(str(self.productPrice))
502 self.qoutaEntry=QLineEdit()
503 self.qoutaEntry.setText(str(self.productQouta))
504 self.availabilityCombo=QComboBox()
505 self.availabilityCombo.addItems(["Available","UnAvailable"])
506 self.uploadBtn=QPushButton("Upload")
507 self.uploadBtn.clicked.connect(self.uploadImg)
508 self.deleteBtn=QPushButton("Delete")
509 self.deleteBtn.clicked.connect(self.deleteProduct)
510 self.updateBtn=QPushButton("Update")
511 self.updateBtn.clicked.connect(self.updateProduct)
512
513
514
515
516 def layouts(self):
517 self.mainLayout=QVBoxLayout()
518 self.topLayout=QVBoxLayout()
519 self.bottomLayout=QFormLayout()
520 self.topFrame=QFrame()
521 self.topFrame.setStyleSheet(style.productTopFrame())
522 self.bottomFrame=QFrame()
523 self.bottomFrame.setStyleSheet(style.productBottomFrame())
524 ###############add widgets###########
525 self.topLayout.addWidget(self.titleText)
526 self.topLayout.addWidget(self.product_Img)
527 self.topFrame.setLayout(self.topLayout)
528 self.bottomLayout.addRow(QLabel("Name: "),self.nameEntry)
529 self.bottomLayout.addRow(QLabel("Manufacturer: "),self.manufacturerEntry)
530 self.bottomLayout.addRow(QLabel("Price: "),self.priceEntry)
531 self.bottomLayout.addRow(QLabel("Qouta: "),self.qoutaEntry)
532 self.bottomLayout.addRow(QLabel("Status: "),self.availabilityCombo)
533 self.bottomLayout.addRow(QLabel("Image: "),self.uploadBtn)
534 self.bottomLayout.addRow(QLabel(""),self.deleteBtn)
535 self.bottomLayout.addRow(QLabel(""),self.updateBtn)
536 self.bottomFrame.setLayout(self.bottomLayout)
537 self.mainLayout.addWidget(self.topFrame)
538 self.mainLayout.addWidget(self.bottomFrame)
539
540
541 self.setLayout(self.mainLayout)
542
543
544
545 def uploadImg(self):
546 size =(256,256)
547 self.filename,ok =QFileDialog.getOpenFileName(self,'Upload Image','','Image
files (*.jpg *.png)')
548 if ok:
549 self.productImg = os.path.basename(self.filename)
550 img=Image.open(self.filename)
551 img=img.resize(size)
552 img.save("img/{0}".format(self.productImg))
553
554 def updateProduct(self):
555 global productId
556 name = self.nameEntry.text()
557 manufacturer=self.manufacturerEntry.text()
558 price=int(self.priceEntry.text())
559 qouta=int(self.qoutaEntry.text())
560 status=self.availabilityCombo.currentText()
561 defaultImg=self.productImg
562
563 if (name and manufacturer and price and qouta !=""):
564
565 try:
566 query="UPDATE products set product_name=?, product_manufacturer =?,
product_price=?,product_qouta=?, product_img=?, product_availability=?
WHERE product_id=?"
567
cur.execute(query,(name,manufacturer,price,qouta,defaultImg,status,produc
tId))
568 con.commit()
569 QMessageBox.information(self,"Info","Product has been updated!")
570 except:
571 QMessageBox.information(self, "Info", "Product has not been updated!")
572 else:
573 QMessageBox.information(self, "Info", "Fields cant be empty!")
574
575 def deleteProduct(self):
576 global productId
577
578 mbox=QMessageBox.question(self,"Warning","Are you sure to delete this
product",QMessageBox.Yes | QMessageBox.No,QMessageBox.No)
579
580 if(mbox==QMessageBox.Yes):
581 try:
582 cur.execute("DELETE FROM products WHERE product_id=?",(productId,))
583 con.commit()
584 QMessageBox.information(self,"Information","Product has been deleted!")
585 self.close()
586
587 except:
588 QMessageBox.information(self, "Information", "Product has not been
deleted!")
589
590
591 def main():
592 App=QApplication(sys.argv)
593 window = Main()
594 sys.exit(App.exec_())
595
596 if __name__ == '__main__':
597 main()