📌 الفكرة
بدل ما نخزن بيانات المستخدمين بشكل ثابت في الكود، هنعتمد على قاعدة بيانات SQLite بحيث:
- كل مستخدم له اسم مستخدم (username)، كلمة مرور (password)، ودور (role: Admin / User).
- عند تسجيل الدخول نتحقق من البيانات من قاعدة البيانات مباشرة.
🖌️ خطوات العمل في Qt Designer
1- نستخدم نفس نافذة تسجيل الدخول (login.ui) من الدرس السابق:- QLineEdit لاسم المستخدم.
- QLineEdit لكلمة المرور (echoMode = Password).
- QPushButton لتسجيل الدخول.
admin.ui
(واجهة المسؤول).user.ui
(واجهة المستخدم العادي).
💻 الكود (باستخدام SQLite)
import sys
import sqlite3
from PyQt5 import uic
from PyQt5.QtWidgets import QApplication, QDialog, QMessageBox, QMainWindow
# نافذة المسؤول (Admin)
class AdminWindow(QMainWindow):
def __init__(self):
super().__init__()
uic.loadUi("admin.ui", self)
# نافذة المستخدم (User)
class UserWindow(QMainWindow):
def __init__(self):
super().__init__()
uic.loadUi("user.ui", self)
# نافذة تسجيل الدخول
class LoginWindow(QDialog):
def __init__(self):
super().__init__()
uic.loadUi("login.ui", self)
# عناصر واجهة المستخدم
self.login_button = self.findChild(type(self.findChild(object, "QPushButton")), "loginButton")
self.username_input = self.findChild(type(self.findChild(object, "QLineEdit")), "usernameLineEdit")
self.password_input = self.findChild(type(self.findChild(object, "QLineEdit")), "passwordLineEdit")
# ربط الزر
self.login_button.clicked.connect(self.check_login)
# إنشاء قاعدة البيانات
self.create_db()
def create_db(self):
"""إنشاء قاعدة بيانات وإضافة مستخدمين تجريبيين إذا لم يكونوا موجودين"""
conn = sqlite3.connect("users.db")
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE,
password TEXT,
role TEXT
)
""")
# إضافة مستخدمين افتراضيين
try:
cursor.execute("INSERT INTO users (username, password, role) VALUES (?, ?, ?)", ("admin", "1234", "Admin"))
cursor.execute("INSERT INTO users (username, password, role) VALUES (?, ?, ?)", ("user", "0000", "User"))
conn.commit()
except sqlite3.IntegrityError:
pass # المستخدمون موجودون بالفعل
conn.close()
def check_login(self):
username = self.username_input.text()
password = self.password_input.text()
conn = sqlite3.connect("users.db")
cursor = conn.cursor()
cursor.execute("SELECT role FROM users WHERE username=? AND password=?", (username, password))
result = cursor.fetchone()
conn.close()
if result:
role = result[0]
self.accept()
if role == "Admin":
self.admin_window = AdminWindow()
self.admin_window.show()
elif role == "User":
self.user_window = UserWindow()
self.user_window.show()
else:
QMessageBox.warning(self, "خطأ", "اسم المستخدم أو كلمة المرور غير صحيحة")
if __name__ == "__main__":
app = QApplication(sys.argv)
login = LoginWindow()
login.show()
sys.exit(app.exec_())
✅ شرح الفكرة
1- عند أول تشغيل، يتم إنشاء قاعدة بياناتusers.db
وجدول users
إذا لم يكن موجودًا.2- يتم إضافة مستخدمين افتراضيين:
admin / 1234
بدور Admin.user / 0000
بدور User.
3-عند تسجيل الدخول يتم التحقق من البيانات:
- إذا كان الدور Admin → تفتح نافذة
admin.ui
. - إذا كان الدور User → تفتح نافذة
user.ui
. - إذا لم تتطابق → يظهر خطأ.
📌 بهذا الشكل عندك نظام دخول متكامل مع قاعدة بيانات SQLite باستخدام PyQt Designer.