في هذا الدرس سنتعلم كيف نطور نموذج تسجيل الدخول بحيث تكون أسماء المستخدمين وكلمات المرور مخزنة في قاعدة بيانات SQLite بدلًا من إدخالها يدويًا في الكود.
🎯 الفكرة
1- إنشاء قاعدة بيانات SQLite باسمusers.db
.2- إنشاء جدول للمستخدمين يحتوي على الحقول:
id
(رقم المستخدم)username
(اسم المستخدم)password
(كلمة المرور)
- يتم البحث في الجدول عن اسم المستخدم وكلمة المرور.
- إذا كانت صحيحة → يتم الدخول للنافذة الرئيسية.
- إذا كانت خاطئة → يظهر تنبيه.
💻 الكود
import sys
import sqlite3
from PyQt5.QtWidgets import (
QApplication, QMainWindow, QDialog, QLabel, QPushButton,
QLineEdit, QVBoxLayout, QWidget, QMessageBox
)
# إنشاء قاعدة البيانات وإضافة مستخدم تجريبي
def init_db():
conn = sqlite3.connect("users.db")
cursor = conn.cursor()
# إنشاء الجدول إذا لم يكن موجودًا
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL,
password TEXT NOT NULL
)
""")
# إدخال مستخدم تجريبي
cursor.execute("SELECT * FROM users WHERE username=?", ("admin",))
if not cursor.fetchone():
cursor.execute("INSERT INTO users (username, password) VALUES (?, ?)", ("admin", "1234"))
conn.commit()
conn.close()
# النافذة الرئيسية
class MainApp(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("النافذة الرئيسية")
self.setGeometry(200, 200, 400, 200)
central_widget = QWidget()
self.setCentralWidget(central_widget)
layout = QVBoxLayout(central_widget)
label = QLabel("مرحبًا بك في التطبيق 🎉")
layout.addWidget(label)
# نافذة تسجيل الدخول
class LoginWindow(QDialog):
def __init__(self):
super().__init__()
self.setWindowTitle("تسجيل الدخول")
self.setGeometry(300, 300, 300, 150)
layout = QVBoxLayout()
# إدخال اسم المستخدم
self.username_input = QLineEdit(self)
self.username_input.setPlaceholderText("اسم المستخدم")
layout.addWidget(self.username_input)
# إدخال كلمة المرور
self.password_input = QLineEdit(self)
self.password_input.setPlaceholderText("كلمة المرور")
self.password_input.setEchoMode(QLineEdit.Password)
layout.addWidget(self.password_input)
# زر تسجيل الدخول
self.login_button = QPushButton("تسجيل الدخول", self)
self.login_button.clicked.connect(self.check_login)
layout.addWidget(self.login_button)
self.setLayout(layout)
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 * FROM users WHERE username=? AND password=?", (username, password))
result = cursor.fetchone()
conn.close()
if result:
self.accept() # تسجيل الدخول ناجح
else:
QMessageBox.warning(self, "خطأ", "اسم المستخدم أو كلمة المرور غير صحيحة")
if __name__ == "__main__":
init_db() # إنشاء قاعدة البيانات وتجهيزها
app = QApplication(sys.argv)
login = LoginWindow()
if login.exec_() == QDialog.Accepted:
window = MainApp()
window.show()
sys.exit(app.exec_())
✅ ما تعلمناه
- كيفية إنشاء قاعدة بيانات SQLite وربطها مع PyQt.
- إنشاء جدول مستخدمين وتعبئته ببيانات تجريبية.
- ربط إدخالات المستخدم في نافذة تسجيل الدخول ببيانات قاعدة البيانات.
📌 في الدرس 14 سنطور أكثر إن شاء الله ونضيف:
- إمكانية تسجيل مستخدم جديد من داخل الواجهة.
- التحقق من قوة كلمة المرور.