في هذا الدرس سنتعلم كيفية عرض القوائم (List Widgets) في واجهة PyQt، وكيفية إضافة وحذف العناصر منها، وأيضًا كيفية الحصول على العنصر المحدد.
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 أزرار:
- إضافة عنصر: لإضافة عنصر جديد للقائمة.
- حذف العنصر المحدد: يحذف العنصر الحالي المختار.
- عرض العنصر المحدد: يظهر رسالة باسم العنصر المختار.
- استخدمنا QMessageBox لعرض الرسائل.
✅ ملاحظات:
- يمكنك جعل القائمة تسمح باختيار عدة عناصر باستخدام:
self.list_widget.setSelectionMode(QListWidget.MultiSelection)
- يمكن تغيير ترتيب العناصر أو إضافة أيقونات بجانب النصوص.
📌 التمرين
أنشئ برنامج يحتوي على:
QListWidget
به قائمة من العناصر (مثلاً: "Python", "Java", "C++", "JavaScript").- زر إضافة لإضافة عنصر جديد يكتبه المستخدم.
- زر حذف لحذف العنصر المحدد.
- عند النقر على أي عنصر، يتم عرض رسالة تحتوي على اسم العنصر.
💻 الحل
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
لإدخال النصوص.