Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## IMPORTS
- import sys
- import os
- from PyQt5.sip import delete
- import PySide2
- import mysql.connector as mc
- from qt_material import *
- from PyQt5 import QtWidgets, uic
- from add_section_page import Ui_Add_Section_Window
- #####################################
- # Import GUI File
- from ui_interface import *
- ######################################
- # Main Window Class
- class MainWindow(QMainWindow):
- def __init__(self):
- QMainWindow.__init__(self)
- self.ui = Ui_MainWindow()
- self.ui.setupUi(self)
- try:
- self.DB = mc.connect(host="localhost", user="root", password="", database="timetable_manager")
- except mc.Error as e:
- print("Error")
- # Load Style Sheet
- apply_stylesheet(app, theme="dark_cyan.xml")
- # Remove Window Title Bar
- self.setWindowFlags(PySide2.QtCore.Qt.FramelessWindowHint)
- # Set main background to transparent
- self.setAttribute(PySide2.QtCore.Qt.WA_TranslucentBackground)
- # Shadow Style Effect
- self.shadow = QGraphicsDropShadowEffect(self)
- self.shadow.setBlurRadius(50)
- self.shadow.setXOffset(0)
- self.shadow.setYOffset(0)
- self.shadow.setColor(QColor(0, 92, 157, 550))
- # Apply shadow to central widget
- self.ui.centralwidget.setGraphicsEffect(self.shadow)
- self.setWindowIcon(PySide2.QtGui.QIcon(":/icons/airplay.svg"))
- # Set Window Title
- self.setWindowTitle("Timetable Manager")
- # Window Size grip to resize window
- QSizeGrip(self.ui.size_grip)
- # Minimize Window
- self.ui.minimize_window_button.clicked.connect(lambda: self.showMinimized())
- # Close Window
- self.ui.close_window_button.clicked.connect(lambda: self.close())
- # Maximize Window
- self.ui.restore_window_button.clicked.connect(lambda: self.restore_or_maximize_window())
- # Navigate to Section Page
- self.ui.section_menu_button.clicked.connect(lambda: self.navigate_to_section_page())
- # Navigate to Course Page
- self.ui.course_menu_button.clicked.connect(lambda: self.navigate_to_course_page())
- self.ui.add_section_button.clicked.connect(self.executeAddSectionPage)
- self.show()
- def navigate_to_section_page(self):
- self.ui.stackedWidget.setCurrentWidget(self.ui.sections_page)
- self.get_section_data()
- def on_section_table_click(self): # Whenever the Delete button gets clicked for section
- selected = self.ui.section_table.selectionModel().selectedIndexes()[0]
- msg = QMessageBox()
- msg.setIcon(QMessageBox.Warning)
- msg.setText("Are you sure you want to delete the selected Section?")
- msg.setStandardButtons(QMessageBox.Yes | QMessageBox.Cancel)
- if (msg.exec_() == 16384): # Means "YES"
- mycursor = self.DB.cursor()
- sql = "Delete from tbl_section where section_id = %s"
- val = (int(self.ui.section_table.item(selected.row(), 0).text()),)
- mycursor.execute(sql, val)
- self.DB.commit()
- self.ui.section_table.clear()
- self.get_section_data()
- print("Deleted")
- else:
- print("Not Deleted")
- def executeAddSectionPage(self):
- self.window = QtWidgets.QMainWindow()
- self.add_section_form = Ui_Add_Section_Window()
- self.add_section_form.setupUi(self.window)
- self.window.show()
- self.add_section_form.section_add_form_button.clicked.connect(self.insert_section_info)
- def insert_section_info(self):
- id = self.add_section_form.section_id_add.text()
- name = self.add_section_form.section_name_add.text()
- mycursor = self.DB.cursor()
- sql = "Insert into tbl_section (section_id, section_name) VALUES (%s, %s)"
- val = (int(id), name)
- mycursor.execute(sql, val)
- self.DB.commit()
- self.window.close()
- self.get_section_data() # Reload the Table
- def get_section_data(self):
- mycursor = self.DB.cursor()
- Subquery = "Select * from tbl_section"
- mycursor.execute(Subquery)
- numcols = len(mycursor.fetchall()[0])
- mycursor.execute(Subquery)
- numrows = len(mycursor.fetchall())
- self.ui.section_table.setRowCount(numrows)
- self.ui.section_table.setColumnCount(numcols+1)
- mycursor.execute(Subquery)
- tablerow = 0
- for row in mycursor.fetchall():
- tablecol = 0
- button = QPushButton()
- icon = QIcon()
- icon.addFile(u":/icons/icons/icons8-remove-48.png", QSize(), QIcon.Normal, QIcon.Off)
- button.setIcon(icon)
- index = PySide2.QtCore.QPersistentModelIndex(self.ui.section_table.model().index(tablerow, tablecol))
- self.ui.section_table.setCellWidget(tablerow, 2, button)
- button.clicked.connect(lambda *args, index=index: self.on_section_table_click())
- while tablecol < numcols:
- self.ui.section_table.setItem(tablerow, tablecol, PySide2.QtWidgets.QTableWidgetItem(str(row[tablecol])))
- tablecol += 1
- tablerow += 1
- def navigate_to_course_page(self):
- self.ui.stackedWidget.setCurrentWidget(self.ui.courses_page)
- self.get_course_data()
- def get_course_data(self):
- mycursor = self.DB.cursor()
- Subquery = "Select course_name, course_code, course_type from tbl_course"
- mycursor.execute(Subquery)
- numcols = len(mycursor.fetchall()[0])
- mycursor.execute(Subquery)
- numrows = len(mycursor.fetchall())
- self.ui.course_table.setRowCount(numrows)
- self.ui.course_table.setColumnCount(numcols+1)
- mycursor.execute(Subquery)
- tablerow = 0
- for row in mycursor.fetchall():
- tablecol = 0
- layout = QHBoxLayout()
- layout.setContentsMargins(0, 0, 0, 0)
- layout.setSpacing(0)
- delete_button = QPushButton()
- icon_delete = QIcon()
- icon_delete.addFile(u":/icons/icons/Delete-button.png", QSize(), QIcon.Normal, QIcon.Off)
- delete_button.setIcon(icon_delete)
- layout.addWidget(delete_button)
- edit_button = QPushButton()
- index = PySide2.QtCore.QPersistentModelIndex(self.ui.course_table.model().index(tablerow, tablecol))
- edit_button.clicked.connect(lambda *args, index=index: self.on_course_edit_click())
- icon_edit = QIcon()
- icon_edit.addFile(u":/icons/icons/edit-button.png", QSize(), QIcon.Normal, QIcon.Off)
- edit_button.setIcon(icon_edit)
- layout.addWidget(edit_button)
- cellWidget = QWidget()
- cellWidget.setLayout(layout)
- self.ui.course_table.setCellWidget(tablerow, 3, cellWidget)
- while tablecol < numcols:
- self.ui.course_table.setItem(tablerow, tablecol, PySide2.QtWidgets.QTableWidgetItem(str(row[tablecol])))
- tablecol += 1
- tablerow += 1
- self.ui.course_table.horizontalHeader().setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
- self.ui.course_table.horizontalHeader().setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents)
- self.ui.course_table.horizontalHeader().setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeToContents)
- # For the Editing of Course
- def on_course_edit_click(self):
- print("to be declared")
- # For the Deletion of Course
- def on_course_delete_button(self):
- print("To be declared")
- def restore_or_maximize_window(self):
- if self.isMaximized():
- self.showNormal()
- #self.ui.restore_window_button.setIcon()
- else:
- self.showMaximized()
- #self.ui.restore_window_button.setIcon()
- #def get_section_data(self):
- # sqlquery = "SELECT * FROM tbl_section"
- # cur = self.db.cursor()
- # for row in cur.execute(sqlquery):
- # print(row)
- ## EXECUTE APP
- if __name__ == "__main__":
- app = QApplication(sys.argv)
- window = MainWindow()
- sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment