📝 الفكرة:
QComboBox هو عنصر يسمح للمستخدم باختيار عنصر واحد من قائمة منسدلة، مثل اختيار الدولة، أو اللغة، أو أي خيار محدد مسبقاً.
📌 أهم الدوال:
-
addItem("النص")→ لإضافة عنصر واحد. -
addItems([قائمة])→ لإضافة عدة عناصر مرة واحدة. -
currentText()→ لجلب النص الحالي المختار. -
currentIndex()→ لجلب رقم الفهرس (index) الحالي. -
clear()→ لمسح جميع العناصر.
💻 مثال عملي:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QComboBox, QLabel
class ComboBoxDemo(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("مثال على QComboBox")
self.setGeometry(300, 200, 300, 200)
# القائمة المنسدلة
self.combo = QComboBox(self)
self.combo.setGeometry(80, 50, 150, 30)
self.combo.addItems(["Python", "Java", "C++", "JavaScript"])
# النص لعرض النتيجة
self.label = QLabel("اختر لغة", self)
self.label.setGeometry(80, 100, 150, 30)
# عند تغيير الاختيار
self.combo.currentIndexChanged.connect(self.selection_changed)
def selection_changed(self):
language = self.combo.currentText()
self.label.setText(f"لقد اخترت: {language}")
app = QApplication(sys.argv)
window = ComboBoxDemo()
window.show()
sys.exit(app.exec_())
📌 شرح:
-
أنشأنا
QComboBoxوأضفنا عناصر. -
عند تغيير الاختيار، يتم تحديث النص في
QLabel.
📝 تمرين تطبيقي بسيط على QComboBox
أنشئ واجهة فيها:
-
قائمة منسدلة تحتوي على أسماء 5 دول.
-
عند اختيار أي دولة، يظهر علم الدولة (كمجرد نص) في
QLabel.
💻 الحل:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QComboBox, QLabel
class CountryFlagApp(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("اختيار الدولة")
self.setGeometry(300, 200, 300, 200)
# قائمة الدول
self.combo = QComboBox(self)
self.combo.setGeometry(80, 50, 150, 30)
self.combo.addItems(["🇸🇦 السعودية", "🇪🇬 مصر", "🇯🇴 الأردن", "🇦🇪 الإمارات", "🇹🇷 تركيا"])
# لعرض النتيجة
self.label = QLabel("اختر دولة", self)
self.label.setGeometry(80, 100, 200, 30)
# حدث عند تغيير الاختيار
self.combo.currentIndexChanged.connect(self.show_flag)
def show_flag(self):
country = self.combo.currentText()
self.label.setText(f"الدولة المختارة: {country}")
app = QApplication(sys.argv)
window = CountryFlagApp()
window.show()
sys.exit(app.exec_())
💡 الفكرة:
-
استخدمنا الرموز التعبيرية للأعلام بدلاً من الصور لتبسيط التمرين.
-
عند اختيار أي دولة، يتم عرض النص مع العلم في الـ
QLabel.
💻 التمرين المطوّريعرض صورة العلم الحقيقية باستخدام PyQt5 و QPixmap
سننشئ واجهة:
-
تحتوي على
QComboBoxلاختيار الدولة. -
عند اختيار الدولة، يظهر صورة العلم في
QLabel.
📂 قبل البدء
ضع صور الأعلام في مجلد المشروع بنفس الأسماء التالية:
saudi.png
egypt.png
jordan.png
uae.png
turkey.png
🔹 الكود
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QComboBox, QLabel
from PyQt5.QtGui import QPixmap
class CountryFlagApp(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("عرض أعلام الدول")
self.setGeometry(300, 200, 400, 300)
# قائمة الدول
self.combo = QComboBox(self)
self.combo.setGeometry(100, 30, 200, 30)
self.combo.addItems(["السعودية", "مصر", "الأردن", "الإمارات", "تركيا"])
# لعرض صورة العلم
self.label = QLabel(self)
self.label.setGeometry(100, 80, 200, 150)
self.label.setScaledContents(True) # حتى تناسب الصورة حجم الـ QLabel
# حدث عند تغيير الاختيار
self.combo.currentIndexChanged.connect(self.show_flag)
# عرض العلم الأول عند بداية التشغيل
self.show_flag()
def show_flag(self):
# ربط أسماء الدول مع ملفات الصور
flags = {
"السعودية": "saudi.png",
"مصر": "egypt.png",
"الأردن": "jordan.png",
"الإمارات": "uae.png",
"تركيا": "turkey.png"
}
country = self.combo.currentText()
pixmap = QPixmap(flags[country])
self.label.setPixmap(pixmap)
app = QApplication(sys.argv)
window = CountryFlagApp()
window.show()
sys.exit(app.exec_())
💡 ملاحظات مهمة:
-
يجب أن تكون صور الأعلام موجودة بنفس المجلد مع الملف.
-
يمكن تعديل حجم الـ
QLabelحسب حجم الصور. -
استخدمنا
setScaledContents(True)لجعل الصورة تتكيف مع حجم المربع.

