الفكرة العامة
- QProgressBar يعرض قيمة نسبة الإنجاز بين حد أدنى وأقصى.
- يمكن ربطه بأي عنصر آخر (مثل QSlider أو QDial) أو تحديثه أثناء عملية فعلية.
- يمكن أن يكون أفقي أو عمودي.
المكتبات المطلوبة
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_())
شرح الكود
- QProgressBar() لإنشاء شريط التقدم.
- setMinimum() و setMaximum() لتحديد النطاق (عادة من 0 إلى 100).
- setValue() لتحديد القيمة الحالية.
- ربط 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 لمحاكاة عملية تحميل.