@@ -68,8 +68,15 @@ def create_input_field(parent, label_text, min_label_size=(120, 0)):
68
68
layout .addWidget (label )
69
69
layout .addWidget (line_edit )
70
70
return frame , line_edit
71
- def pop_up_message (parent , message : str , page : int ):
72
- """Create a popup message box with a given message."""
71
+ def show_popup_message (parent , message : str , page : int = None , show_cancel : bool = True ):
72
+ """Reusable popup message box.
73
+
74
+ Args:
75
+ parent: The parent widget.
76
+ message (str): The message to display.
77
+ page (int, optional): Page index to switch to after dialog closes.
78
+ show_cancel (bool): Whether to show the Cancel button.
79
+ """
73
80
dialog = QtWidgets .QDialog (parent )
74
81
dialog .setWindowTitle ("Message" )
75
82
dialog .setFixedSize (350 , 100 )
@@ -84,9 +91,14 @@ def pop_up_message(parent, message: str, page: int):
84
91
label .setWordWrap (True )
85
92
layout .addWidget (label )
86
93
87
- button_box = QtWidgets .QDialogButtonBox (
88
- QtWidgets .QDialogButtonBox .Ok | QtWidgets .QDialogButtonBox .Cancel
89
- )
94
+ # Decide which buttons to show
95
+ if show_cancel :
96
+ button_box = QtWidgets .QDialogButtonBox (
97
+ QtWidgets .QDialogButtonBox .Ok | QtWidgets .QDialogButtonBox .Cancel
98
+ )
99
+ else :
100
+ button_box = QtWidgets .QDialogButtonBox (QtWidgets .QDialogButtonBox .Ok )
101
+
90
102
button_box .setStyleSheet ("""
91
103
QPushButton {
92
104
background-color: #3498db;
@@ -104,66 +116,24 @@ def pop_up_message(parent, message: str, page: int):
104
116
""" )
105
117
layout .addWidget (button_box )
106
118
107
- button_box .accepted .connect (dialog .accept )
108
- button_box .rejected .connect (lambda : reject_clicked (dialog , parent , page ))
109
-
110
- dialog .exec_ ()
111
-
112
- def reject_clicked (dialog , parent , page ):
113
- parent .setCurrentIndex (page )
114
- dialog .reject ()
115
-
116
- def pop_up_message_with_only_ok (parent , message : str , page : int ):
117
- """Create a popup message box with only an OK button."""
118
- dialog = QtWidgets .QDialog (parent )
119
- dialog .setWindowTitle ("Message" )
120
- dialog .setFixedSize (350 , 100 )
121
- dialog .setStyleSheet ("background-color: #f0f0f0;" )
119
+ # Connect buttons
120
+ def on_accept ():
121
+ if page is not None :
122
+ parent .setCurrentIndex (page )
123
+ dialog .accept ()
122
124
123
- layout = QtWidgets .QVBoxLayout (dialog )
124
- layout .setSpacing (10 )
125
- layout .setContentsMargins (15 , 15 , 15 , 15 )
126
-
127
- label = QtWidgets .QLabel (message )
128
- label .setStyleSheet ("font-size: 12px; color: #2c3e50;" )
129
- label .setWordWrap (True )
130
- layout .addWidget (label )
131
-
132
- button_box = QtWidgets .QDialogButtonBox (QtWidgets .QDialogButtonBox .Ok )
133
- button_box .setStyleSheet ("""
134
- QPushButton {
135
- background-color: #3498db;
136
- color: white;
137
- border-radius: 4px;
138
- padding: 6px 12px;
139
- min-width: 80px;
140
- }
141
- QPushButton:hover {
142
- background-color: #2980b9;
143
- }
144
- QPushButton:pressed {
145
- background-color: #1c6ea4;
146
- }
147
- """ )
148
- layout .addWidget (button_box )
125
+ def on_reject ():
126
+ if page is not None :
127
+ parent .setCurrentIndex (page )
128
+ dialog .reject ()
149
129
150
- button_box .accepted .connect (lambda : accepted_clicked ())
151
- def accepted_clicked ():
152
- parent .setCurrentIndex (page )
153
- dialog .close ()
130
+ button_box .accepted .connect (on_accept )
131
+ button_box .rejected .connect (on_reject )
154
132
155
133
dialog .exec_ ()
156
134
def create_login_page (parent ,title , name_field_text = "Name :" , password_field_text = "Password :" , submit_text = "Submit" ,):
157
135
"""Create a login page with a title, name and password fields, and a submit button."""
158
- page = QtWidgets .QWidget (parent )
159
- main_layout = QtWidgets .QVBoxLayout (page )
160
-
161
- # Header frame with title
162
- header_frame = create_styled_frame (page , style = "background-color: #ffffff; border-radius: 10px; padding: 10px;" )
163
- header_layout = QtWidgets .QVBoxLayout (header_frame )
164
- title_label = create_styled_label (header_frame , title , font_size = 30 )
165
- header_layout .addWidget (title_label , 0 , QtCore .Qt .AlignHCenter | QtCore .Qt .AlignTop )
166
- main_layout .addWidget (header_frame , 0 , QtCore .Qt .AlignTop )
136
+ page , main_layout = create_page_with_header (parent , "Admin Menu" )
167
137
168
138
# Content frame
169
139
content_frame = create_styled_frame (page )
@@ -203,23 +173,13 @@ def on_login_button_clicked(parent,name_field, password_field):
203
173
# Check if the entered name and password are correct
204
174
if name == "" and password == "" :
205
175
# Show a message box with the entered name and password
206
- pop_up_message (parent , "Please enter your name and password." ,0 )
176
+ show_popup_message (parent , "Please enter your name and password." ,0 )
207
177
else :
208
178
print (f"Name: { name } , Password: { password } " )
209
179
210
180
def create_home_page (parent , on_admin_clicked , on_employee_clicked , on_exit_clicked ):
211
181
"""Create the home page with Admin, Employee, and Exit buttons."""
212
- page = QtWidgets .QWidget (parent )
213
- main_layout = QtWidgets .QVBoxLayout (page )
214
- main_layout .setContentsMargins (20 , 20 , 20 , 20 )
215
- main_layout .setSpacing (20 )
216
-
217
- # Header frame with title
218
- header_frame = create_styled_frame (page , style = "background-color: #ffffff; border-radius: 10px; padding: 10px;" )
219
- header_layout = QtWidgets .QVBoxLayout (header_frame )
220
- title_label = create_styled_label (header_frame , "Bank Management System" , font_size = 30 )
221
- header_layout .addWidget (title_label , 0 , QtCore .Qt .AlignHCenter )
222
- main_layout .addWidget (header_frame , 0 , QtCore .Qt .AlignTop )
182
+ page , main_layout = create_page_with_header (parent , "Admin Menu" )
223
183
224
184
# Button frame
225
185
button_frame = create_styled_frame (page )
@@ -267,95 +227,78 @@ def create_home_page(parent, on_admin_clicked, on_employee_clicked, on_exit_clic
267
227
exit_button .clicked .connect (on_exit_clicked )
268
228
269
229
return page
270
-
271
- def create_admin_menu_page (perent ):
272
- """Create the admin menu page with buttons for adding, deleting, and viewing accounts."""
273
- page = QtWidgets .QWidget (perent )
230
+ def create_page_with_header (parent , title_text ):
231
+ """Create a page with a styled header and return the page + main layout."""
232
+ page = QtWidgets .QWidget (parent )
274
233
main_layout = QtWidgets .QVBoxLayout (page )
275
234
main_layout .setContentsMargins (20 , 20 , 20 , 20 )
276
235
main_layout .setSpacing (20 )
277
236
278
- # Header frame with title
279
237
header_frame = create_styled_frame (page , style = "background-color: #ffffff; border-radius: 10px; padding: 10px;" )
280
238
header_layout = QtWidgets .QVBoxLayout (header_frame )
281
- title_label = create_styled_label (header_frame , "Admin Menu" , font_size = 30 )
282
- header_layout .addWidget (title_label , 0 , QtCore .Qt .AlignHCenter )
239
+ title_label = create_styled_label (header_frame , title_text , font_size = 30 )
240
+ header_layout .addWidget (title_label , 0 , QtCore .Qt .AlignHCenter | QtCore .Qt .AlignTop )
241
+
283
242
main_layout .addWidget (header_frame , 0 , QtCore .Qt .AlignTop )
243
+ return page , main_layout
244
+ def create_admin_menu_page (parent ):
245
+ page , main_layout = create_page_with_header (parent , "Admin Menu" )
284
246
285
- # Button frame
286
247
button_frame = create_styled_frame (page )
287
248
button_frame .setSizePolicy (QtWidgets .QSizePolicy .Preferred , QtWidgets .QSizePolicy .Expanding )
288
249
button_layout = QtWidgets .QVBoxLayout (button_frame )
289
- # Button container
250
+
290
251
button_container = create_styled_frame (button_frame , min_size = (300 , 0 ), style = "background-color: #ffffff; border-radius: 15px; padding: 20px;" )
291
252
button_container_layout = QtWidgets .QVBoxLayout (button_container )
292
253
button_container_layout .setSpacing (15 )
293
- # Buttons
294
- add_button = create_styled_button (button_container , "Add Employee" )
295
- update_employee = create_styled_button (button_container , "Update Employee" )
296
- employee_list = create_styled_button (button_container , "Employee List" )
297
- total_money = create_styled_button (button_container , "Total Money" )
298
- back_to_home = create_styled_button (button_container , "Back" )
299
- button_container_layout .addWidget (add_button )
300
- button_container_layout .addWidget (update_employee )
301
- button_container_layout .addWidget (employee_list )
302
- button_container_layout .addWidget (total_money )
303
- button_container_layout .addWidget (back_to_home )
254
+
255
+ # Define button labels
256
+ button_labels = ["Add Employee" , "Update Employee" , "Employee List" , "Total Money" , "Back" ]
257
+ buttons = []
258
+
259
+ for label in button_labels :
260
+ btn = create_styled_button (button_container , label )
261
+ button_container_layout .addWidget (btn )
262
+ buttons .append (btn )
263
+
304
264
button_layout .addWidget (button_container , 0 , QtCore .Qt .AlignHCenter | QtCore .Qt .AlignVCenter )
305
265
main_layout .addWidget (button_frame )
306
- # Connect button signals
307
- # add_button.clicked.connect(on_add_employee_clicked)
308
- # update_employee.clicked.connect(on_update_employee_clicked)
309
- # employee_list.clicked.connect(on_employee_list_clicked)
310
- # total_money.clicked.connect(on_total_money_clicked)
311
- # back_to_home.clicked.connect(on_back_to_home_clicked)
312
- return page ,add_button ,update_employee ,employee_list ,total_money ,back_to_home
313
-
314
- def create_add_employe_page (parent ,title , name_field_text = "Name :" , password_field_text = "Password :" ,position_fielld_text = "Position :" ,salary_field_text = "Salary :" ,submit_text = "Submit" ,):
315
- """Create a login page with a title, name and password fields, and a submit button."""
316
- page = QtWidgets .QWidget (parent )
317
- main_layout = QtWidgets .QVBoxLayout (page )
318
-
319
- # Header frame with title
320
- header_frame = create_styled_frame (page , style = "background-color: #ffffff; border-radius: 10px; padding: 10px;" )
321
- header_layout = QtWidgets .QVBoxLayout (header_frame )
322
- title_label = create_styled_label (header_frame , title , font_size = 30 )
323
- header_layout .addWidget (title_label , 0 , QtCore .Qt .AlignHCenter | QtCore .Qt .AlignTop )
324
- main_layout .addWidget (header_frame , 0 , QtCore .Qt .AlignTop )
266
+
267
+ return page , * buttons # Unpack as add_button, update_employee, etc.
268
+
325
269
326
- # Content frame
270
+ def create_add_employee_page (parent , title , submit_text = "Submit" ):
271
+ page , main_layout = create_page_with_header (parent , title )
272
+
327
273
content_frame = create_styled_frame (page )
328
274
content_frame .setSizePolicy (QtWidgets .QSizePolicy .Preferred , QtWidgets .QSizePolicy .Expanding )
329
275
content_layout = QtWidgets .QVBoxLayout (content_frame )
330
-
331
- # Form frame
276
+
332
277
form_frame = create_styled_frame (content_frame , min_size = (340 , 200 ), style = "background-color: #ffffff; border-radius: 15px; padding: 10px;" )
333
278
form_layout = QtWidgets .QVBoxLayout (form_frame )
334
279
form_layout .setSpacing (20 )
335
-
336
- # Input fields
337
- name_frame , name_edit = create_input_field (form_frame , name_field_text )
338
- password_frame , password_edit = create_input_field (form_frame , password_field_text )
339
- salary_frame , salary_edit = create_input_field (form_frame , salary_field_text )
340
- position_frame , position_edit = create_input_field (form_frame , position_fielld_text )
341
-
280
+
281
+ # Define input fields
282
+ fields = ["Name :" , "Password :" , "Salary :" , "Position :" ]
283
+ edits = []
284
+
285
+ for field in fields :
286
+ field_frame , field_edit = create_input_field (form_frame , field )
287
+ form_layout .addWidget (field_frame )
288
+ edits .append (field_edit )
289
+
342
290
# Submit button
343
291
button_frame = create_styled_frame (form_frame , style = "padding: 7px;" )
344
292
button_layout = QtWidgets .QVBoxLayout (button_frame )
345
- button_layout .setSpacing (60 )
346
293
submit_button = create_styled_button (button_frame , submit_text , min_size = (150 , 0 ))
347
294
button_layout .addWidget (submit_button , 0 , QtCore .Qt .AlignHCenter )
348
-
349
- form_layout .addWidget (name_frame )
350
- form_layout .addWidget (password_frame )
351
- form_layout .addWidget (salary_frame )
352
- form_layout .addWidget (position_frame )
295
+
353
296
form_layout .addWidget (button_frame )
354
-
355
297
content_layout .addWidget (form_frame , 0 , QtCore .Qt .AlignHCenter | QtCore .Qt .AlignVCenter )
356
298
main_layout .addWidget (content_frame )
357
-
358
- return page , name_edit , password_edit , salary_edit , position_edit ,submit_button
299
+
300
+ return page , * edits , submit_button # Unpack as name_edit, password_edit, etc.
301
+
359
302
def setup_main_window (main_window ):
360
303
"""Set up the main window with a stacked widget containing home, admin, and employee pages."""
361
304
main_window .setObjectName ("MainWindow" )
@@ -383,6 +326,7 @@ def admin_login_menu_page(name, password):
383
326
stacked_widget .setCurrentIndex (3 )
384
327
else :
385
328
print ("Invalid admin credentials" )
329
+ show_popup_message (stacked_widget ,"Invalid admin credentials" ,0 )
386
330
387
331
def add_employee_form_submit (name , password , salary , position ):
388
332
if (
@@ -392,34 +336,74 @@ def add_employee_form_submit(name, password, salary, position):
392
336
and len (position ) != 0
393
337
):
394
338
backend .create_employee (name , password , salary , position )
395
- pop_up_message_with_only_ok (stacked_widget ,"Employee added successfully" ,3 )
339
+ show_popup_message (stacked_widget ,"Employee added successfully" ,3 , False )
396
340
397
341
else :
398
342
print ("Please fill in all fields" )
399
- pop_up_message (stacked_widget ,"Please fill in all fields" ,3 )
343
+ show_popup_message (stacked_widget ,"Please fill in all fields" ,3 )
400
344
401
345
402
- home_page = create_home_page (stacked_widget , switch_to_admin , switch_to_employee , exit_app )
403
- admin_page , admin_name , admin_password , admin_submit = create_login_page (stacked_widget , "Admin Login" )
346
+ # Create Home Page
347
+ home_page = create_home_page (
348
+ stacked_widget ,
349
+ switch_to_admin ,
350
+ switch_to_employee ,
351
+ exit_app
352
+ )
353
+
354
+ # Create Admin Login Page
355
+ admin_page , admin_name , admin_password , admin_submit = create_login_page (
356
+ stacked_widget ,
357
+ title = "Admin Login"
358
+ )
359
+ admin_password .setEchoMode (QtWidgets .QLineEdit .Password )
360
+ admin_name .setFont (QtGui .QFont ("Arial" , 10 ))
361
+ admin_password .setFont (QtGui .QFont ("Arial" , 10 ))
362
+ admin_name .setPlaceholderText ("Enter your name" )
363
+ admin_password .setPlaceholderText ("Enter your password" )
364
+
404
365
admin_submit .clicked .connect (
405
- lambda : admin_login_menu_page (admin_name .text (), admin_password .text ())
366
+ lambda : admin_login_menu_page (
367
+ admin_name .text (),
368
+ admin_password .text ()
369
+ )
370
+ )
371
+
372
+ # Create Admin Menu Page
373
+ admin_menu_page , add_button , update_button , list_button , money_button , back_button = create_admin_menu_page (
374
+ stacked_widget
406
375
)
407
- admin_menu_page ,add_button ,update_employee ,employee_list ,total_money ,back_to_home = create_admin_menu_page (stacked_widget )
408
- add_button .clicked .connect (lambda :stacked_widget .setCurrentIndex (4 ))
409
- # create employee page
410
- add_employe_page , new_employee_name , new_employee_password , new_employe_salary , new_employe_position , new_employee_submit = create_add_employe_page (stacked_widget , "Add Employee" )
411
- new_employee_submit .clicked .connect (
412
- lambda : add_employee_form_submit (new_employee_name .text (), new_employee_password .text (), new_employe_salary .text (), new_employe_position .text ())
376
+
377
+ add_button .clicked .connect (lambda : stacked_widget .setCurrentIndex (4 ))
378
+
379
+ # Create Add Employee Page
380
+ add_employee_page , emp_name , emp_password , emp_salary , emp_position , emp_submit = create_add_employee_page (
381
+ stacked_widget ,
382
+ title = "Add Employee"
383
+ )
384
+
385
+ emp_submit .clicked .connect (
386
+ lambda : add_employee_form_submit (
387
+ emp_name .text (),
388
+ emp_password .text (),
389
+ emp_salary .text (),
390
+ emp_position .text ()
391
+ )
392
+ )
393
+
394
+ # Create Employee Login Page
395
+ employee_page , employee_name , employee_password , employee_submit = create_login_page (
396
+ stacked_widget ,
397
+ title = "Employee Login"
413
398
)
414
- employee_page , employee_name , employee_password , employee_submit = create_login_page (stacked_widget , "Employee Login" )
415
399
416
400
417
401
# Add pages to stacked widget
418
402
stacked_widget .addWidget (home_page )#1
419
403
stacked_widget .addWidget (admin_page )#2
420
404
stacked_widget .addWidget (employee_page )#3
421
405
stacked_widget .addWidget (admin_menu_page )#4
422
- stacked_widget .addWidget (add_employe_page )#5
406
+ stacked_widget .addWidget (add_employee_page )#5
423
407
424
408
main_layout .addWidget (stacked_widget )
425
409
main_window .setCentralWidget (central_widget )
0 commit comments