Untitled
Anonymous
python
06/18/2024 10:44 AM
9.5 KB
18
Indexable
import sys
import psycopg2
from PyQt5.uic import loadUi
from PyQt5.QtCore import QSize
from PyQt5.QtWidgets import QDialog, QMainWindow, QApplication, QStackedWidget, QGridLayout, QFrame, QLabel, QWidget, QMessageBox, QPushButton, QVBoxLayout
from ui_staff import StaffTab
from ui_schedule1 import ScheduleTab
from ui_login import Ui_Form
from wesdw import widgets # Ensure this imports the correct widget class
# Database connection setup
conn = psycopg2.connect(host='localhost', dbname='insurgents', user='postgres', password='123456', port='5432')
cur = conn.cursor()
class AddSchedScreen(QWidget): # Changed to QWidget
def __init__(self, stacked_widget, date):
super(AddSchedScreen, self).__init__()
self.stacked_widget = stacked_widget
self.date = date
self.setMinimumSize(1006, 575)
self.setWindowTitle('Add Schedule Screen')
# Use the MainWindow content from grip.py
self.initUI()
def initUI(self):
grid_layout = QGridLayout(self) # Creating a grid layout
self.frame2 = QFrame(self)
self.frame = QFrame(self)
self.frame2.setStyleSheet("background-color:#f2f2f2;")
# Create the back button
self.back_button = QPushButton("Back", self.frame2)
self.back_button.setStyleSheet("background-color: #B10303; color: white; padding: 5px 10px; border-radius: 5px;")
self.back_button.setMinimumSize(QSize(50, 30))
# Add layout manager to frame2
self.frame2_layout = QVBoxLayout(self.frame2)
self.frame2_layout.addWidget(self.back_button)
self.block = QLabel(self.frame)
self.frame.setStyleSheet("background-color: #ECE6E6;")
self.block.setStyleSheet("background-color: green;")
self.f = widgets(self.date, self.frame)
self.f.setStyleSheet("background-color:lightgrey;")
grid_layout.addWidget(self.frame, 1, 0)
grid_layout.addWidget(self.frame2, 0, 0)
self.setLayout(grid_layout)
# Connect the back button to the slot or function
self.back_button.clicked.connect(self.on_back_button_clicked)
def on_back_button_clicked(self):
# Find the ScheduleScreen and set it as the current widget
for i in range(self.stacked_widget.count()):
widget = self.stacked_widget.widget(i)
if isinstance(widget, ScheduleScreen):
self.stacked_widget.setCurrentIndex(i)
return
def resizeEvent(self, event):
frame_width = int(self.height() * 0.8)
self.frame.setFixedHeight(frame_width)
self.f.setGeometry(0, 0, int(self.frame.width()), int(self.frame.height()))
button_width = min(int(self.frame2.width() * 0.2), 100) # Set a maximum width for the button
button_height = int(button_width * 0.4) # Adjust the height proportionally
self.back_button.setFixedSize(button_width, button_height)
super().resizeEvent(event) # Ensure the base class resizeEvent is also called
class StaffScreen(QMainWindow): # Changed to QMainWindow
def __init__(self, stacked_widget):
super(StaffScreen, self).__init__()
self.ui = StaffTab()
self.ui.setupUi(self) # Set up the UI
self.stacked_widget = stacked_widget
self.ui.schedbtn.clicked.connect(self.open_schedule) # Connect to the open_schedule method
def open_schedule(self):
sched = self.get_schedule_screen()
self.stacked_widget.setCurrentWidget(sched)
def get_schedule_screen(self):
# Check if ScheduleScreen already exists in stacked_widget
for i in range(self.stacked_widget.count()):
widget = self.stacked_widget.widget(i)
if isinstance(widget, ScheduleScreen):
return widget
# If not, create a new one
sched = ScheduleScreen(self.stacked_widget)
self.stacked_widget.addWidget(sched)
return sched
class ScheduleScreen(QMainWindow):
def __init__(self, stacked_widget):
super(ScheduleScreen, self).__init__()
self.ui = ScheduleTab()
self.ui.setupUi(self) # Set up the UI
self.stacked_widget = stacked_widget
self.add_sched_screen = None
# Ensure the button is correctly referenced
if hasattr(self.ui, 'staffbtn'):
self.ui.staffbtn.clicked.connect(self.open_staff)
else:
print("Error: 'staffbtn' not found in UI setup")
self.ui.calendarWidget.selectionChanged.connect(self.ui.printSelectedDate)
self.ui.addschedbtn.clicked.connect(self.open_addsched)
def open_staff(self):
staff = self.get_staff_screen()
self.stacked_widget.setCurrentWidget(staff)
def get_staff_screen(self):
# Check if StaffScreen already exists in stacked_widget
for i in range(self.stacked_widget.count()):
widget = self.stacked_widget.widget(i)
if isinstance(widget, StaffScreen):
return widget
# If not, create a new one
staff = StaffScreen(self.stacked_widget)
self.stacked_widget.addWidget(staff)
return staff
def open_addsched(self):
# Remove existing AddSchedScreen if it exists
if self.add_sched_screen is not None:
self.stacked_widget.removeWidget(self.add_sched_screen)
self.add_sched_screen.deleteLater()
self.add_sched_screen = None
date = self.ui.selected_date
self.add_sched_screen = AddSchedScreen(self.stacked_widget, date)
self.stacked_widget.addWidget(self.add_sched_screen)
self.stacked_widget.setCurrentWidget(self.add_sched_screen)
class LoginScreen(QDialog):
def __init__(self, stacked_widget):
super(LoginScreen, self).__init__()
self.ui = Ui_Form() # Instantiate the UI class
self.ui.setupUi(self) # Set up the UI
self.stacked_widget = stacked_widget
self.ui.btnLogin.clicked.connect(self.loginfunction)
def loginfunction(self):
user = self.ui.inputEmail.text()
password = self.ui.inputPass.text()
cur.execute("""SELECT password FROM users WHERE username = %s""", (user,))
result_pass = cur.fetchone()
if len(user) == 0 and len(password) == 0:
self.ui.error.setText('Input all field')
else:
if result_pass and result_pass[0] == password:
self.open_staff()
else:
self.ui.error.setText('Invalid Email or Password')
def open_schedule(self):
sched = ScheduleScreen(self.stacked_widget) # Pass the stacked widget instance
self.stacked_widget.addWidget(sched)
self.stacked_widget.setCurrentWidget(sched)
def open_staff(self):
staff = StaffScreen(self.stacked_widget)
self.stacked_widget.addWidget(staff)
self.stacked_widget.setCurrentWidget(staff)
if __name__ == '__main__':
app = QApplication(sys.argv)
widget = QStackedWidget()
login = LoginScreen(widget)
widget.addWidget(login)
widget.show()
sys.exit(app.exec_())
Editor is loading...
Leave a Comment