0% found this document useful (0 votes)
59 views

Pyqt

Uploaded by

Mehdi Benbarka
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
59 views

Pyqt

Uploaded by

Mehdi Benbarka
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 5

import sys

from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QLineEdit,


QRadioButton, QComboBox, \
QTextEdit, QPushButton, QCheckBox, QMessageBox, QVBoxLayout, QWidget,
QHBoxLayout, QTabWidget, QTableWidget, QTableWidgetItem, QHeaderView,QLineEdit
from PyQt5.QtCore import QDate, Qt
from PyQt5.QtGui import QFont, QIcon
import mysql.connector
class Formulaire(QMainWindow):
def __init__(self):
super().__init__()

self.setWindowTitle("Formulaire d'inscription")
self.setGeometry(300, 90, 600, 600)

self.centralWidget = QWidget(self)
self.setCentralWidget(self.centralWidget)

self.dark_mode_enabled = False # Initialize dark mode state

self.conn = mysql.connector.connect(
host="localhost",
user="root",
password="1234",
database="grh"
)
self.cursor = self.conn.cursor()

self.initUI()

def initUI(self):
layout = QVBoxLayout()

self.tab_widget = QTabWidget()
layout.addWidget(self.tab_widget)

# Inscription tab
inscription_tab = QWidget()
self.tab_widget.addTab(inscription_tab, "Inscription")
self.initInscriptionUI(inscription_tab)

# Employee Data tab


employee_tab = QWidget()
self.tab_widget.addTab(employee_tab, "Data")
self.initEmployeeDataUI(employee_tab)

# Dark mode toggle button


self.dark_mode_button = QPushButton("Dark Mode: Off")
self.dark_mode_button.clicked.connect(self.toggleDarkMode) # Connect to
toggleDarkMode function
layout.addWidget(self.dark_mode_button)

self.centralWidget.setLayout(layout)

self.centralWidget.setLayout(layout)

def toggleDarkMode(self):
# Define dark mode stylesheet
dark_stylesheet = """
* {
background-color: #303030;
color: #ffffff;
}
QTabWidget::pane {
background-color: #303030;
}
QTabBar {
background-color: #303030;
color: #ffffff;
}
QTabBar::tab {
background-color: #404040;
color: #ffffff;
}
QTabBar::tab:selected {
background-color: #505050;
}
QHeaderView::section {
background-color: #303030;
color: #ffffff;
padding-left: 0px; /* Adjust padding or margin as needed */
margin-left: 0px; /* Adjust padding or margin as needed */
}
"""

if not self.dark_mode_enabled:
# Apply dark mode stylesheet to the entire application
self.setStyleSheet(dark_stylesheet)
self.tab_widget.setStyleSheet(dark_stylesheet)
self.employee_table.horizontalHeader().setStyleSheet(dark_stylesheet)
self.dark_mode_button.setText("Dark Mode: On")
self.dark_mode_enabled = True
else:
# Turn off dark mode
self.setStyleSheet("")
self.tab_widget.setStyleSheet("")
self.employee_table.horizontalHeader().setStyleSheet("")
self.dark_mode_button.setText("Dark Mode: Off")
self.dark_mode_enabled = False

def initInscriptionUI(self, tab):


layout = QVBoxLayout(tab)

self.titre = QLabel("Inscription")
self.titre.setFont(QFont("Arial", 12))
layout.addWidget(self.titre)

self.descriptionLabelNom = QLabel("Nom :")


layout.addWidget(self.descriptionLabelNom)
self.textFieldNom = QLineEdit()
layout.addWidget(self.textFieldNom)

self.descriptionLabelPrenom = QLabel("Prenom :")


layout.addWidget(self.descriptionLabelPrenom)
self.textFieldPrenom = QLineEdit()
layout.addWidget(self.textFieldPrenom)

self.descriptionLabelGender = QLabel("Gender :")


layout.addWidget(self.descriptionLabelGender)
self.maleRadioButton = QRadioButton("Male")
self.femaleRadioButton = QRadioButton("Female")
gender_layout = QHBoxLayout()
gender_layout.addWidget(self.maleRadioButton)
gender_layout.addWidget(self.femaleRadioButton)
layout.addLayout(gender_layout)

self.descriptionLabelDate = QLabel("Date :")


layout.addWidget(self.descriptionLabelDate)
self.dayComboBox = QComboBox()
self.monthComboBox = QComboBox()
self.yearComboBox = QComboBox()

# Populate day combobox


for i in range(1, 32):
self.dayComboBox.addItem(str(i))

# Populate month combobox


months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep",
"Oct", "Nov", "Dec"]
self.monthComboBox.addItems(months)

# Populate year combobox


for i in range(2024, 1974, -1):
self.yearComboBox.addItem(str(i))

date_layout = QHBoxLayout()
date_layout.addWidget(self.dayComboBox)
date_layout.addWidget(self.monthComboBox)
date_layout.addWidget(self.yearComboBox)
layout.addLayout(date_layout)

self.descriptionLabelAddress = QLabel("Address :")


layout.addWidget(self.descriptionLabelAddress)
self.textAreaAddress = QTextEdit()
layout.addWidget(self.textAreaAddress)

self.descriptionLabelSalaire = QLabel("Salaire :")


layout.addWidget(self.descriptionLabelSalaire)
self.textFieldSalaire = QLineEdit()
layout.addWidget(self.textFieldSalaire)

# Button to attach document


self.attachButton = QPushButton("Attach Document")
layout.addWidget(self.attachButton)

self.acceptCheckBox = QCheckBox("Accepter les conditions du contrat")


layout.addWidget(self.acceptCheckBox)

buttons_layout = QHBoxLayout()
self.validerButton = QPushButton("Valider")
self.validerButton.clicked.connect(self.validerClicked)
self.annulerButton = QPushButton("Annuler")
self.annulerButton.clicked.connect(self.annulerClicked)
buttons_layout.addWidget(self.validerButton)
buttons_layout.addWidget(self.annulerButton)
layout.addLayout(buttons_layout)
def initEmployeeDataUI(self, tab):
layout = QVBoxLayout(tab)

self.employee_table = QTableWidget()
layout.addWidget(self.employee_table)

# Set section resize mode to stretch

self.employee_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

self.update_button = QPushButton("Update")
self.update_button.clicked.connect(self.updateEmployeeData)
layout.addWidget(self.update_button)

self.updateEmployeeData() # Fetch initial data on tab load

def validerClicked(self):
nom = self.textFieldNom.text()
prenom = self.textFieldPrenom.text()
genre = "F"
if self.maleRadioButton.isChecked():
genre = "M"
jour = int(self.dayComboBox.currentText())
mois = self.monthComboBox.currentIndex() + 1
annee = int(self.yearComboBox.currentText())
dateNaissance = QDate(annee, mois, jour)
adresse = self.textAreaAddress.toPlainText()
salaire = self.textFieldSalaire.text()
contrat = self.acceptCheckBox.isChecked()
values = (nom, prenom, genre, dateNaissance.toString(Qt.ISODate), adresse,
salaire)
if not (nom and prenom and adresse and salaire):
QMessageBox.critical(self, "Erreur", "Veuillez remplir tous les
champs.")
return

if not contrat:
QMessageBox.critical(self, "Erreur", "Veuillez accepter les conditions
du contrat.")
return

try:
sql = "INSERT INTO employe (nom, prenom, genre, ddn, adresse, salaire)
VALUES (%s, %s, %s, %s, %s, %s)"
values = (nom, prenom, genre, dateNaissance.toString(Qt.ISODate),
adresse, salaire)
self.cursor.execute(sql, values)
self.conn.commit()
QMessageBox.information(self, "Success", "Data inserted into database
successfully.")
except mysql.connector.Error as err:
QMessageBox.critical(self, "Error", f"Failed to insert data into
database: {err}")

def annulerClicked(self):
self.textFieldNom.clear()
self.textFieldPrenom.clear()
self.maleRadioButton.setChecked(True)
self.textAreaAddress.clear()
self.dayComboBox.setCurrentIndex(0)
self.monthComboBox.setCurrentIndex(0)
self.yearComboBox.setCurrentIndex(0)
self.textFieldSalaire.clear()
self.acceptCheckBox.setChecked(False)

def updateEmployeeData(self):
try:
sql = "SELECT nom, prenom, genre, ddn, adresse, salaire FROM employe"
self.cursor.execute(sql)
employee_data = self.cursor.fetchall()
# Clear existing data in the table
self.employee_table.clearContents()
self.employee_table.setRowCount(0)
# Set column count and headers
column_count = len(employee_data[0]) if employee_data else 0
self.employee_table.setColumnCount(column_count)
headers = ["Nom", "Prenom", "Genre", "Date de Naissance", "Adresse",
"Salaire"]
self.employee_table.setHorizontalHeaderLabels(headers)
# Populate the table with fetched data
for row_index, row_data in enumerate(employee_data):
self.employee_table.insertRow(row_index)
for col_index, col_data in enumerate(row_data):
item = QTableWidgetItem(str(col_data))
self.employee_table.setItem(row_index, col_index, item)
except mysql.connector.Error as err:
QMessageBox.critical(self, "Error", f"Failed to fetch data from
database: {err}")

def closeEvent(self, event):


if self.conn.is_connected():
self.cursor.close()
self.conn.close()

if __name__ == "__main__":
app = QApplication(sys.argv)
formulaire = Formulaire()
formulaire.show()
sys.exit(app.exec_())

You might also like