تقنيات نور التعليمية تقنيات نور التعليمية
في الوقت الحالي

جاري صيانة و تحديث للمدونة

في الوقت الحالي
جاري التحميل ...

الدرس 16: التعامل مع القوائم في PyQt

في هذا الدرس سنتعلم كيفية عرض القوائم (List Widgets) في واجهة PyQt، وكيفية إضافة وحذف العناصر منها، وأيضًا كيفية الحصول على العنصر المحدد.

List Widgets

1. ما هو QListWidget؟

  • هو عنصر واجهة رسومية GUI يستخدم لعرض قائمة من العناصر النصية.
  • يمكنك إضافة عناصر باستخدام addItem() أو addItems().
  • يمكن للمستخدم تحديد عنصر واحد أو عدة عناصر حسب الإعدادات.

2. أهم الدوال المستخدمة مع QListWidget:

الدالة الوظيفة
addItem(text) إضافة عنصر نصي واحد.
addItems(list) إضافة قائمة من العناصر دفعة واحدة.
takeItem(index) حذف عنصر حسب ترتيبه.
currentItem() الحصول على العنصر الحالي المحدد.
count() معرفة عدد العناصر في القائمة.

3. مثال عملي

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QListWidget, QPushButton, QMessageBox

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("مثال على القوائم في PyQt")
        self.setGeometry(200, 200, 300, 300)

        # التخطيط
        layout = QVBoxLayout()

        # إنشاء القائمة
        self.list_widget = QListWidget()
        self.list_widget.addItems(["Python", "Java", "C++", "JavaScript"])
        layout.addWidget(self.list_widget)

        # زر إضافة عنصر
        btn_add = QPushButton("إضافة عنصر")
        btn_add.clicked.connect(self.add_item)
        layout.addWidget(btn_add)

        # زر حذف العنصر المحدد
        btn_remove = QPushButton("حذف العنصر المحدد")
        btn_remove.clicked.connect(self.remove_item)
        layout.addWidget(btn_remove)

        # زر عرض العنصر المحدد
        btn_show = QPushButton("عرض العنصر المحدد")
        btn_show.clicked.connect(self.show_item)
        layout.addWidget(btn_show)

        self.setLayout(layout)

    def add_item(self):
        self.list_widget.addItem("عنصر جديد")

    def remove_item(self):
        current_row = self.list_widget.currentRow()
        if current_row >= 0:
            self.list_widget.takeItem(current_row)

    def show_item(self):
        current_item = self.list_widget.currentItem()
        if current_item:
            QMessageBox.information(self, "العنصر المحدد", f"لقد اخترت: {current_item.text()}")

# تشغيل التطبيق
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())

4. شرح الكود:

  • قمنا بإنشاء QListWidget لإضافة وعرض العناصر.
  • أضفنا 3 أزرار:
    1. إضافة عنصر: لإضافة عنصر جديد للقائمة.
    2. حذف العنصر المحدد: يحذف العنصر الحالي المختار.
    3. عرض العنصر المحدد: يظهر رسالة باسم العنصر المختار.
  • استخدمنا QMessageBox لعرض الرسائل.

ملاحظات:

  • يمكنك جعل القائمة تسمح باختيار عدة عناصر باستخدام:
    self.list_widget.setSelectionMode(QListWidget.MultiSelection)
    
  • يمكن تغيير ترتيب العناصر أو إضافة أيقونات بجانب النصوص.

📌 التمرين

أنشئ برنامج يحتوي على:

  1. QListWidget به قائمة من العناصر (مثلاً: "Python", "Java", "C++", "JavaScript").
  2. زر إضافة لإضافة عنصر جديد يكتبه المستخدم.
  3. زر حذف لحذف العنصر المحدد.
  4. عند النقر على أي عنصر، يتم عرض رسالة تحتوي على اسم العنصر.

💻 الحل

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QListWidget, QPushButton, QLineEdit, QMessageBox

class ListWidgetExample(QWidget):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("QListWidget Example")
        self.resize(300, 300)

        layout = QVBoxLayout()

        # قائمة العناصر
        self.list_widget = QListWidget()
        self.list_widget.addItems(["Python", "Java", "C++", "JavaScript"])
        self.list_widget.itemClicked.connect(self.show_item)

        # إدخال نص لإضافة عناصر جديدة
        self.input_field = QLineEdit()
        self.input_field.setPlaceholderText("أدخل اسم العنصر")

        # زر إضافة
        add_button = QPushButton("إضافة")
        add_button.clicked.connect(self.add_item)

        # زر حذف
        delete_button = QPushButton("حذف")
        delete_button.clicked.connect(self.delete_item)

        layout.addWidget(self.list_widget)
        layout.addWidget(self.input_field)
        layout.addWidget(add_button)
        layout.addWidget(delete_button)

        self.setLayout(layout)

    def add_item(self):
        text = self.input_field.text().strip()
        if text:
            self.list_widget.addItem(text)
            self.input_field.clear()
        else:
            QMessageBox.warning(self, "تنبيه", "الرجاء إدخال نص قبل الإضافة.")

    def delete_item(self):
        selected_item = self.list_widget.currentItem()
        if selected_item:
            self.list_widget.takeItem(self.list_widget.row(selected_item))
        else:
            QMessageBox.warning(self, "تنبيه", "الرجاء اختيار عنصر لحذفه.")

    def show_item(self, item):
        QMessageBox.information(self, "العنصر المحدد", f"لقد اخترت: {item.text()}")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = ListWidgetExample()
    window.show()
    sys.exit(app.exec_())

📖 شرح مختصر

  • QListWidget لعرض قائمة العناصر.
  • addItems() لإضافة أكثر من عنصر دفعة واحدة.
  • itemClicked.connect() لربط حدث النقر على العنصر بدالة.
  • takeItem() لحذف عنصر بناءً على رقمه في القائمة.
  • QLineEdit لإدخال النصوص.

عن الكاتب

Tamer Ahmed

التعليقات


اتصل بنا

إذا أعجبك محتوى مدونتنا نتمنى البقاء على تواصل دائم ، فقط قم بإدخال بريدك الإلكتروني للإشتراك في بريد المدونة السريع ليصلك جديد المدونة أولاً بأول ، كما يمكنك إرسال رساله بالضغط على الزر المجاور ...

جميع الحقوق محفوظة

تقنيات نور التعليمية