📌 الفكرة
في هذا الدرس هنطوّر واجهة المسؤول (Admin UI) بحيث يقدر:
- عرض جميع المستخدمين في جدول.
- إضافة مستخدم جديد.
- تعديل بيانات مستخدم موجود.
- حذف مستخدم.
كل هذا مع ربط مباشر بقاعدة بيانات SQLite.
🖌️ خطوات التصميم في Qt Designer
1- افتحadmin.ui في Qt Designer.2- أضف العناصر التالية:
- QTableWidget (لعرض المستخدمين).
- QLineEdit لإدخال اسم المستخدم الجديد.
- QLineEdit لإدخال كلمة المرور.
- QComboBox لاختيار الدور (Admin / User).
3 - أزرار:
- "إضافة مستخدم"
- "تعديل مستخدم"
- "حذف مستخدم"
💻 الكود
import sys
import sqlite3
from PyQt5 import uic
from PyQt5.QtWidgets import (
QApplication, QMainWindow, QMessageBox, QTableWidgetItem
)
class AdminWindow(QMainWindow):
def __init__(self):
super().__init__()
uic.loadUi("admin.ui", self)
# ربط العناصر
self.table = self.findChild(type(self.findChild(object, "QTableWidget")), "usersTable")
self.username_input = self.findChild(type(self.findChild(object, "QLineEdit")), "usernameLineEdit")
self.password_input = self.findChild(type(self.findChild(object, "QLineEdit")), "passwordLineEdit")
self.role_combo = self.findChild(type(self.findChild(object, "QComboBox")), "roleComboBox")
self.add_button = self.findChild(type(self.findChild(object, "QPushButton")), "addButton")
self.edit_button = self.findChild(type(self.findChild(object, "QPushButton")), "editButton")
self.delete_button = self.findChild(type(self.findChild(object, "QPushButton")), "deleteButton")
# ربط الأزرار بالدوال
self.add_button.clicked.connect(self.add_user)
self.edit_button.clicked.connect(self.edit_user)
self.delete_button.clicked.connect(self.delete_user)
# تحميل المستخدمين عند بدء التشغيل
self.load_users()
def load_users(self):
"""تحميل المستخدمين من قاعدة البيانات وعرضهم في الجدول"""
conn = sqlite3.connect("users.db")
cursor = conn.cursor()
cursor.execute("SELECT id, username, role FROM users")
users = cursor.fetchall()
conn.close()
self.table.setRowCount(0)
for row_number, row_data in enumerate(users):
self.table.insertRow(row_number)
for column_number, data in enumerate(row_data):
self.table.setItem(row_number, column_number, QTableWidgetItem(str(data)))
def add_user(self):
username = self.username_input.text()
password = self.password_input.text()
role = self.role_combo.currentText()
if not username or not password:
QMessageBox.warning(self, "خطأ", "يرجى إدخال جميع البيانات")
return
try:
conn = sqlite3.connect("users.db")
cursor = conn.cursor()
cursor.execute("INSERT INTO users (username, password, role) VALUES (?, ?, ?)",
(username, password, role))
conn.commit()
conn.close()
QMessageBox.information(self, "نجاح", "تمت إضافة المستخدم بنجاح")
self.load_users()
except sqlite3.IntegrityError:
QMessageBox.warning(self, "خطأ", "اسم المستخدم موجود بالفعل")
def edit_user(self):
selected_row = self.table.currentRow()
if selected_row == -1:
QMessageBox.warning(self, "خطأ", "يرجى اختيار مستخدم للتعديل")
return
user_id = self.table.item(selected_row, 0).text()
username = self.username_input.text()
password = self.password_input.text()
role = self.role_combo.currentText()
conn = sqlite3.connect("users.db")
cursor = conn.cursor()
if password: # تعديل مع كلمة المرور
cursor.execute("UPDATE users SET username=?, password=?, role=? WHERE id=?",
(username, password, role, user_id))
else: # تعديل بدون تغيير كلمة المرور
cursor.execute("UPDATE users SET username=?, role=? WHERE id=?",
(username, role, user_id))
conn.commit()
conn.close()
QMessageBox.information(self, "نجاح", "تم تعديل بيانات المستخدم")
self.load_users()
def delete_user(self):
selected_row = self.table.currentRow()
if selected_row == -1:
QMessageBox.warning(self, "خطأ", "يرجى اختيار مستخدم للحذف")
return
user_id = self.table.item(selected_row, 0).text()
conn = sqlite3.connect("users.db")
cursor = conn.cursor()
cursor.execute("DELETE FROM users WHERE id=?", (user_id,))
conn.commit()
conn.close()
QMessageBox.information(self, "نجاح", "تم حذف المستخدم")
self.load_users()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = AdminWindow()
window.show()
sys.exit(app.exec_())
✅ شرح
- الجدول QTableWidget يعرض المستخدمين مع الأعمدة (ID – اسم المستخدم – الدور).
- عند إدخال البيانات والضغط على إضافة → يضاف المستخدم لقاعدة البيانات.
- عند تحديد مستخدم من الجدول → يمكن تعديله أو حذفه.
- النظام مرتبط مباشرة بـ users.db من الدرس السابق.
📌 بهذا أصبح عندك واجهة إدارة مستخدمين كاملة في PyQt Designer.

