يوفر هذا البرنامج التعليمي دليلًا شاملاً لاستخدام QGridLayout
القوية في PyQt5 لإنشاء واجهات مستخدم مرنة ومنظمة. سنغطي الأساسيات، والتقنيات المتقدمة مثل امتداد الخلايا والتحكم في تمدد الأدوات، ونقدم أمثلة عملية لترسيخ فهمك.
محتويات الجدول
1. الاستخدام الأساسي لـ QGridLayout
يرتب QGridLayout
الأدوات في شبكة من الصفوف والأعمدة. تشغل كل أداة خلية واحدة افتراضيًا. لنبدأ بمثال بسيط:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("مثال تخطيط الشبكة PyQt5")
layout = QGridLayout()
button1 = QPushButton("زر 1")
button2 = QPushButton("زر 2")
button3 = QPushButton("زر 3")
button4 = QPushButton("زر 4")
layout.addWidget(button1, 0, 0) # الصف 0، العمود 0
layout.addWidget(button2, 0, 1) # الصف 0، العمود 1
layout.addWidget(button3, 1, 0) # الصف 1، العمود 0
layout.addWidget(button4, 1, 1) # الصف 1، العمود 1
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
هذا ينشئ شبكة 2 × 2 من الأزرار. addWidget(widget, row, column)
يضيف أداة إلى الصف والعمود المحددين (بمؤشر صفر).
2. امتداد خلايا متعددة
لجعل أداة تمتد عبر صفوف أو أعمدة متعددة، استخدم addWidget(widget, row, column, rowspan, colspan)
. rowspan
و colspan
يحددان عدد الصفوف والأعمدة التي تشغلها الأداة.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout, QLabel
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("مثال امتداد تخطيط الشبكة PyQt5")
layout = QGridLayout()
label = QLabel("هذا الملصق يمتد على عمودين")
button1 = QPushButton("زر 1")
button2 = QPushButton("زر 2")
layout.addWidget(label, 0, 0, 1, 2) # يمتد على عمودين
layout.addWidget(button1, 1, 0)
layout.addWidget(button2, 1, 1)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
هنا، يمتد الملصق على عمودين.
3. التحكم في تمدد الأدوات
افتراضيًا، يتم تحديد حجم الأدوات إلى الحد الأدنى لحجمها. للتحكم في كيفية توسيع الأدوات لملء المساحة المتاحة، استخدم setColumnStretch(column, stretch)
و setRowStretch(row, stretch)
. يعني عامل تمدد أعلى أن الأداة ستشغل حصة أكبر نسبيًا من المساحة المتاحة.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("مثال تمدد تخطيط الشبكة PyQt5")
layout = QGridLayout()
button1 = QPushButton("زر 1")
button2 = QPushButton("زر 2")
layout.addWidget(button1, 0, 0)
layout.addWidget(button2, 0, 1)
layout.setColumnStretch(1, 2) # العمود 1 يمتد ضعف العمود 0
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
سيأخذ button2
الآن ضعف المساحة الأفقية لـ button1
.
4. تقنيات متقدمة واعتبارات
للتخطيطات الأكثر تعقيدًا، ضع في اعتبارك استخدام:
addLayout()
: تضمين تخطيطات أخرى داخلQGridLayout
لهياكل متداخلة.- المحاذاة: استخدم
setAlignment()
للتحكم في محاذاة الأدوات داخل خلاياها. - التباعد: ضبط التباعد بين الصفوف والأعمدة باستخدام
setVerticalSpacing()
وsetHorizontalSpacing()
. - الهوامش: التحكم في الهوامش حول الشبكة بأكملها باستخدام
setContentsMargins()
.
إتقان هذه التقنيات سيمكنك من إنشاء واجهات PyQt5 متطورة وقابلة للتكيف للغاية.