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

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

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

الدرس 19 – استخدام QProgressBar في PyQt

الفكرة العامة

  • QProgressBar يعرض قيمة نسبة الإنجاز بين حد أدنى وأقصى.
  • يمكن ربطه بأي عنصر آخر (مثل QSlider أو QDial) أو تحديثه أثناء عملية فعلية.
  • يمكن أن يكون أفقي أو عمودي.
استخدام QProgressBar في PyQt

المكتبات المطلوبة

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QProgressBar, QSlider
from PyQt5.QtCore import Qt

مثال أساسي على QProgressBar

class ProgressBarExample(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("مثال على QProgressBar")
        self.setGeometry(200, 200, 400, 200)

        layout = QVBoxLayout()

        self.label = QLabel("القيمة: 50%", self)
        self.label.setAlignment(Qt.AlignCenter)

        self.progress = QProgressBar()
        self.progress.setMinimum(0)
        self.progress.setMaximum(100)
        self.progress.setValue(50)  # قيمة ابتدائية

        self.slider = QSlider(Qt.Horizontal)
        self.slider.setMinimum(0)
        self.slider.setMaximum(100)
        self.slider.setValue(50)
        self.slider.valueChanged.connect(self.update_progress)

        layout.addWidget(self.label)
        layout.addWidget(self.progress)
        layout.addWidget(self.slider)

        self.setLayout(layout)

    def update_progress(self, value):
        self.progress.setValue(value)
        self.label.setText(f"القيمة: {value}%")

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

شرح الكود

  1. QProgressBar() لإنشاء شريط التقدم.
  2. setMinimum() و setMaximum() لتحديد النطاق (عادة من 0 إلى 100).
  3. setValue() لتحديد القيمة الحالية.
  4. ربط QSlider بـ QProgressBar بحيث يتحرك الشريط مع تحريك السلايدر.

تمرين عملي على QProgressBar – محاكاة التحميل

في هذا التمرين، سنقوم بإنشاء شريط تقدم يتحرك تلقائيًا كأننا نقوم بتحميل ملف.


الكود مع الحل

import sys
import time
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QProgressBar, QPushButton
from PyQt5.QtCore import Qt, QTimer

class DownloadSimulator(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("محاكاة التحميل")
        self.setGeometry(200, 200, 400, 200)

        layout = QVBoxLayout()

        self.label = QLabel("اضغط على الزر لبدء التحميل", self)
        self.label.setAlignment(Qt.AlignCenter)

        self.progress = QProgressBar()
        self.progress.setMinimum(0)
        self.progress.setMaximum(100)
        self.progress.setValue(0)

        self.button = QPushButton("بدء التحميل")
        self.button.clicked.connect(self.start_download)

        layout.addWidget(self.label)
        layout.addWidget(self.progress)
        layout.addWidget(self.button)

        self.setLayout(layout)

        # مؤقت لتحديث الشريط
        self.timer = QTimer()
        self.timer.timeout.connect(self.update_progress)
        self.value = 0

    def start_download(self):
        self.value = 0
        self.progress.setValue(0)
        self.label.setText("جاري التحميل...")
        self.timer.start(100)  # تحديث كل 0.1 ثانية

    def update_progress(self):
        if self.value < 100:
            self.value += 1
            self.progress.setValue(self.value)
        else:
            self.timer.stop()
            self.label.setText("تم التحميل بنجاح ✅")

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

شرح التمرين

  • عند الضغط على الزر، يبدأ QTimer في زيادة قيمة الشريط تدريجيًا.
  • كل 100 مللي ثانية، تزيد القيمة بمقدار 1 حتى تصل إلى 100.
  • عند اكتمال التحميل، يتوقف المؤقت ويعرض رسالة نجاح.

📌 النتيجة:
يمكنك التحكم في شريط التقدم إما يدويًا باستخدام QSlider أو تلقائيًا باستخدام QTimer لمحاكاة عملية تحميل.

عن الكاتب

Tamer Ahmed

التعليقات


اتصل بنا

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

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

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