🎯 الهدف: تعلم كيفية إنشاء زر (Button) والتفاعل معه باستخدام الإشارات (signals) والفتحات (slots).
🧱 الخطوة 1: إنشاء زر مع نافذة بسيطة
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("زر تفاعلي")
self.setGeometry(100, 100, 300, 200)
# إنشاء زر
self.button = QPushButton("اضغطني", self)
self.button.setGeometry(100, 80, 100, 40)
# ربط الزر بالوظيفة
self.button.clicked.connect(self.on_button_click)
def on_button_click(self):
QMessageBox.information(self, "تم الضغط", "لقد ضغطت على الزر!")
# تشغيل التطبيق
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
🔍 شرح الكود:
| السطر | الوظيفة |
|---|---|
QPushButton(...) |
إنشاء زر داخل النافذة |
button.clicked.connect(...) |
ربط حدث الضغط بالوظيفة on_button_click |
QMessageBox.information(...) |
عرض رسالة عند الضغط |
🧪 تمرين تطبيقي:
❓ المطلوب:
أنشئ نافذة تحتوي على زر "احسب"، وعند الضغط عليه يظهر مربع رسالة يحتوي على ناتج جمع عددين (مثلاً: 5 + 3).
✅ الحل المقترح:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox
class MyCalc(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("زر الحسبة")
self.setGeometry(100, 100, 300, 200)
self.button = QPushButton("احسب 5 + 3", self)
self.button.setGeometry(80, 80, 140, 40)
self.button.clicked.connect(self.calculate)
def calculate(self):
result = 5 + 3
QMessageBox.information(self, "النتيجة", f"الناتج هو: {result}")
app = QApplication(sys.argv)
window = MyCalc()
window.show()
sys.exit(app.exec_())
📝 ملاحظات ومعلومات هامة حول QPushButton في PyQt
✅ 1. ما هو QPushButton؟
هو عنصر واجهة مستخدم (Widget) يُستخدم لإنشاء زر قابل للنقر في واجهة المستخدم. يمكن ربطه بوظيفة (أو أكثر) ليقوم بعمل معين عند الضغط عليه.
✅ 2. ما هي signals و slots في PyQt؟
- Signal (إشارة): هو حدث يحدث داخل البرنامج، مثل الضغط على زر.
- Slot (فتحة): هي دالة تستجيب لهذا الحدث.
📌 عندما تضغط على زر، يصدر الزر "إشارة"، ويمكنك ربط هذه الإشارة بـ "دالة" (Slot) لمعالجة الحدث.
مثال:
button.clicked.connect(self.some_function)
✅ 3. أنواع الإشارات في QPushButton:
clicked: عند الضغط على الزر.pressed: عند الضغط عليه دون إفلات.released: عند إفلات الزر بعد الضغط.toggled: عند التبديل إذا كان الزر من نوع toggle button.
✅ 4. تعديل شكل الزر:
يمكنك تغيير نص الزر أو تنسيقه بسهولة:
self.button.setText("زر جديد")
self.button.setStyleSheet("background-color: green; color: white; font-size: 16px;")
✅ 5. يمكنك إنشاء أكثر من زر وربط كل واحد بوظيفة مختلفة:
self.button1 = QPushButton("زر 1", self)
self.button1.clicked.connect(self.func1)
self.button2 = QPushButton("زر 2", self)
self.button2.clicked.connect(self.func2)
✅ 6. التعامل مع موقع الزر (x, y) وحجمه (width, height):
self.button.setGeometry(x, y, width, height)
مثلاً:
self.button.setGeometry(50, 100, 120, 40)
✅ 7. استخدام QMessageBox لعرض رسائل:
QMessageBox.information(self, "العنوان", "النص")
أنواع رسائل QMessageBox:
information: معلوماتwarning: تحذيرcritical: خطأquestion: سؤال
✅ 8. اختصارات مهمة:
| الوظيفة | الكود |
|---|---|
| تغيير نص الزر | setText("...") |
| إخفاء الزر | hide() |
| إظهار الزر | show() |
| تعطيل الزر | setEnabled(False) |
| تفعيل الزر | setEnabled(True) |

