برنامج PyQt5 التعليمي مع أمثلة: تصميم واجهة المستخدم الرسومية باستخدام PyQt في Python
ما هو باي كيوت؟
باي كيوت هو ربط بايثون لمجموعة أدوات Qt مفتوحة المصدر، والتي تعمل أيضًا كإطار عمل لتطوير التطبيقات عبر الأنظمة الأساسية. Qt هو إطار عمل شائع C++ إطار عمل لكتابة تطبيقات واجهة المستخدم الرسومية لجميع أنظمة سطح المكتب والجوال والمنصات المدمجة الرئيسية (يدعم Linux، Windows، MacOS ، Androidو iOS و Raspberry Pi والمزيد).
PyQt هو برنامج مجاني تم تطويره وصيانته بواسطة شركة Riverbank Computing، وهي شركة مقرها في إنجلترا، في حين تم تطوير Qt بواسطة شركة فنلندية تسمى The Qt Company.
مميزات باي كيو تي
فيما يلي ميزات مهمة لـ PyQt:
تعلم PyQt الذي يتكون من أكثر من ستمائة فصل يغطي مجموعة من الميزات مثل
- واجهات المستخدم الرسومية
- قواعد بيانات سكل
- مجموعات أدوات الويب
- معالجة XML
- الشبكات
يمكن دمج هذه الميزات لإنشاء واجهات مستخدم متقدمة بالإضافة إلى تطبيقات مستقلة. تستخدم الكثير من الشركات الكبرى في جميع الصناعات تقنية Qt. بعض الأمثلة هي LG، وMercedes، وAMD، وPanasonic، وHarman، وما إلى ذلك.
إصدارات باي كيوت
PyQt متاح في نسختين، PyQt4 وPyQt5. يوفر PyQt4 رمزًا لاصقًا لربط الإصدارات 4.x و5.x من إطار عمل Qt بينما يوفر PyQt5 ربطًا للإصدارات 5.x فقط. ونتيجة لذلك، فإن PyQt5 غير متوافق مع الإصدارات السابقة مع الوحدات المهملة من الإصدار الأقدم. في هذا البرنامج التعليمي لـ Qt GUI، سيتم استخدام PyQt5 لعرض الأمثلة. وبصرف النظر عن هذين الإصدارين،
توفر شركة Riverbank Computing أيضًا PyQt3D — روابط python لإطار عمل Qt3D. Qt3D هو إطار عمل تطبيقي يستخدم لإنشاء أنظمة محاكاة في الوقت الفعلي مع عرض ثنائي الأبعاد وثلاثي الأبعاد.
كيفية تثبيت باي كيو تي 5
في هذا البرنامج التعليمي PyQt5، سنرى طريقتين لتثبيت PyQt:
- استخدام ملفات العجلة
- البناء والتثبيت من المصدر
Qt (تُلفظ cute) هو نظام معقد، وتحتوي قاعدة بيانات PyQt على ملفات مجمعة C++ و Python الكود الموجود تحت الغطاء. ونتيجة لذلك، فإن عملية إنشائه وتثبيته من المصدر معقدة مقارنة بمكتبات بايثون الأخرى. ومع ذلك، يمكنك بسهولة تثبيت PyQt5 باستخدام العجلات.
التثبيت بالعجلات
العجلات هي المعيار الجديد Python تنسيق التعبئة والتوزيع. ببساطة، العجلة عبارة عن أرشيف ZIP يحمل اسمًا خاصًا و.[وهل] امتداد الملف. يمكن تثبيت العجلات باستخدام النقطة (Pythonمدير الحزم الخاص بـ )، والذي يتم تضمينه افتراضيًا في الإصدارات الأخيرة من Python.
لذا ، إذا كان لديك Python إذا كنت تستخدم إصدارًا أقدم من pip، فأنت تمتلك pip بالفعل. ومع ذلك، إذا كنت تستخدم إصدارًا أقدم من pip، فأنت تمتلك pip بالفعل. Python، يجب عليك تنزيل النقطة وتثبيتها قبل المضي قدمًا. ويمكنك البحث عن تعليمات لذلك على هذا الرابط: https://pypi.org/project/pip/.
لتثبيت PyQt5،
الخطوة 1) افتح موجه الأوامر.
افتح موجه الأوامر أو PowerShell في جهازك Windows آلة.
الخطوة 2) اكتب ما يلي.
pip install PyQt5
الخطوة 3) التثبيت بنجاح.
ستقوم هذه الخطوة في هذا البرنامج التعليمي PyQt5 بتنزيل حزمة PyQt5 whl (حوالي 50 ميجابايت) وتثبيتها على نظامك.
وبدلاً من ذلك، يمكنك أيضًا تنزيل ملف Windows ثنائي لإصدار بايثون المثبت على جهاز الكمبيوتر الخاص بك.
بمجرد اكتماله، انتقل إلى القسم التالي في برنامج PyQt5 التعليمي لكتابة أول تطبيق لواجهة المستخدم الرسومية (GUI).
باي كيوت الأساسية Concepts والبرامج
الآن بعد أن قمت بتثبيت PyQt5 بنجاح على جهاز الكمبيوتر الخاص بك، أنت جاهز للكتابة Python تطبيقات تصميم واجهة المستخدم الرسومية.
لنبدأ بتطبيق بسيط في هذا البرنامج التعليمي PyQt5 والذي سيعرض نافذة فارغة على شاشتك.
أطلق النار على الثعبان الخاص بك IDLE واكتب ما يلي:
برنامج 1
import sys
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == "__main__":
app = QApplication(sys.argv)
w = QWidget()
w.resize(300,300)
w.setWindowTitle("Guru99")
w.show()
sys.exit(app.exec_())
احفظه باسم app.py (لا يهم الاسم) واضغط على F5 لتشغيل البرنامج. أو يمكنك النقر نقرًا مزدوجًا فوق الملف المحفوظ لتشغيل التطبيق. إذا قمت بكل شيء بشكل صحيح، فستفتح نافذة جديدة بعنوان Guru99 كما هو موضح أدناه.
عظيم! انها تعمل. إنه ليس كثيرًا، لكنه يكفي لفهم الأساسيات. الآن في هذا البرنامج التعليمي لـ PyQt، دعنا نرى بالتفصيل ما يفعله كل سطر في برنامجك.
from PyQt5.QtWidgets import QApplication, QWidget
يستورد هذا البيان جميع الوحدات التي تحتاجها لإنشاء واجهة المستخدم الرسومية في مساحة الاسم الحالية. تحتوي وحدة QtWidgets على جميع الأدوات الرئيسية التي ستستخدمها في هذا Python كيو تي تعليمي.
app = QApplication(sys.argv)
هنا، تقوم بإنشاء كائن من فئة QApplication. هذه الخطوة ضرورية لـ PyQt5؛ يجب على كل تطبيق واجهة مستخدم إنشاء مثيل QApplication، كنوع من نقطة الدخول إلى التطبيق. إذا لم تقم بإنشائه، سيتم عرض الأخطاء.
sys.argv هي قائمة معلمات سطر الأوامر التي يمكنك تمريرها إلى التطبيق عند تشغيله من خلال Shell أو أثناء أتمتة الواجهة.
في مثال PyQt5 هذا، لم تقم بتمرير أي وسيطات إلى QApplications. لذلك، يمكنك أيضًا استبداله بالكود أدناه دون الحاجة إلى استيراد وحدة sys.
app = QApplication([])
w = QWidget()
بعد ذلك، نقوم بإنشاء كائن من فئة QWidget. QWidget هي الفئة الأساسية لجميع كائنات واجهة المستخدم في Qt، وكل شيء تقريبًا تراه في التطبيق هو عنصر واجهة مستخدم. ويشمل ذلك الحوارات والنصوص والأزرار والأشرطة وما إلى ذلك. الميزة التي تسمح لك بتصميم واجهات مستخدم معقدة هي أنه يمكن تضمين عناصر واجهة المستخدم، أي أنه يمكنك وضع عنصر واجهة مستخدم داخل عنصر واجهة مستخدم، والذي يوجد داخل عنصر واجهة مستخدم آخر. سترى هذا عمليًا في القسم التالي.
w.resize(300,300)
تتيح لك طريقة تغيير الحجم لفئة QWidget ضبط أبعاد أي عنصر واجهة مستخدم. في هذه الحالة، قمت بتغيير حجم النافذة إلى 300 بكسل في 300 بكسل.
هنا، يجب أن تتذكر أنه يمكن دمج عناصر واجهة المستخدم معًا، ويطلق على عنصر واجهة المستخدم الخارجي (أي عنصر واجهة المستخدم الذي لا يحتوي على أصل) اسم "نافذة".
w.setWindowTitle("Guru99")
يسمح لك الأسلوب setWindowTitle() بتمرير سلسلة كوسيطة والتي ستقوم بتعيين عنوان النافذة إلى السلسلة التي تمررها. في مثال PyQt5، سيعرض شريط العنوان Guru99.
w.show()
يعرض show() ببساطة الأداة على شاشة العرض.
sys.exit(app.exec_())
يبدأ الأسلوب app.exec_() Qt/C++ حلقة الحدث. كما تعلم، تمت كتابة PyQt إلى حد كبير C++ ويستخدم آلية حلقة الحدث لتنفيذ التنفيذ المتوازي. يمرر app.exec_() التحكم إلى Qt الذي سيخرج من التطبيق فقط عندما يغلقه المستخدم من واجهة المستخدم الرسومية. لهذا السبب لن يخرج ctrl + c من التطبيق كما هو الحال في برامج بايثون الأخرى. نظرًا لأن Qt لديه سيطرة على التطبيق، فلا تتم معالجة أحداث بايثون إلا إذا قمنا بإعدادها داخل التطبيق. لاحظ أيضًا أن طريقة exec بها شرطة سفلية في اسمها؛ وذلك لأن exec() كانت بالفعل كلمة أساسية في بايثون والشرطة السفلية تحل تعارض التسمية.
ما وراء النوافذ الفارغة
في القسم السابق، رأيت كيفية إنشاء عنصر واجهة مستخدم أساسي في Qt. لقد حان الوقت الآن لإنشاء بعض الواجهات الأكثر تفاعلاً والتي يمكن للمستخدمين التفاعل معها حقًا. مرة أخرى، أطلق النار على الخاص بك IDLE واكتب ما يلي.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox
def dialog():
mbox = QMessageBox()
mbox.setText("Your allegiance has been noted")
mbox.setDetailedText("You are now a disciple and subject of the all-knowing Guru")
mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
mbox.exec_()
if __name__ == "__main__":
app = QApplication(sys.argv)
w = QWidget()
w.resize(300,300)
w.setWindowTitle("Guru99")
label = QLabel(w)
label.setText("Behold the Guru, Guru99")
label.move(100,130)
label.show()
btn = QPushButton(w)
btn.setText('Beheld')
btn.move(110,150)
btn.show()
btn.clicked.connect(dialog)
w.show()
sys.exit(app.exec_())
احفظ الملف باسم appone.py أو أي اسم تريده واضغط على F5 لتشغيل البرنامج. إذا لم ترتكب أي أخطاء، IDLE سيتم فتح نافذة جديدة تحتوي على بعض النص وزر كما هو موضح أدناه.
- بمجرد النقر فوق الزر في النافذة الأولى، سيتم فتح مربع رسالة جديد يحتوي على النص الذي كتبته.
- يمكنك الآن النقر فوق زر إخفاء التفاصيل/إظهار التفاصيل لتبديل رؤية النص الإضافي.
كما ترى، نظرًا لأننا لم نقم بتعيين أي عنوان للنافذة في مربع الرسالة، فقد تم توفير عنوان افتراضي بواسطة بايثون نفسه.
الآن بعد أن بدأ العمل، دعنا نلقي نظرة على الكود الإضافي الذي أضفته إلى مثال PyQt5 السابق.
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox
يؤدي هذا إلى استيراد المزيد من الأدوات التي استخدمتها في أمثلة PyQt5، وهي QLabel وQPushButton وQMessageBox.
def dialog():
mbox = QMessageBox()
mbox.setText("Your allegiance has been noted")
mbox.setDetailedText("You are now a disciple and subject of the all-knowing Guru")
mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
mbox.exec_()
هنا، قمت بتعريف طريقة تسمى الحوار والتي تقوم بإنشاء عنصر واجهة مستخدم لمربع الرسائل وتعيين بعض النص للأزرار والحقول الأخرى.
يتم استدعاء أسلوب الحوار من الكتلة الرئيسية للبرنامج عند الضغط على زر في عنصر واجهة مستخدم محدد (في هذه الحالة، btn PushButton). يؤدي حدث النقر الذي تم تشغيله على هذا الزر إلى تنفيذ هذه الوظيفة. تسمى هذه الوظيفة بالفتحة في Qt، وسوف تتعلم المزيد عنها إشارات و فتحات في الفقرات القادمة.
if __name__ == "__main__":
app = QApplication(sys.argv)
w = QWidget()
w.resize(300,300)
w.setWindowTitle("Guru99")
هذا هو القسم الرئيسي من التطبيق، وكما في المثال السابق، تبدأ بإنشاء مثيل QApplication متبوعًا بعنصر واجهة مستخدم بسيط، أي مثيل QWidget.
label = QLabel(w)
btn = QPushButton(w)
لقد قمت بإضافة أداتين جديدتين في هذا التطبيق: QLabel وQPushButton. يتم استخدام QLabel لطباعة نص أو عناصر نائبة غير قابلة للتحرير داخل عنصر واجهة المستخدم، بينما يتم استخدام QPushButton لإنشاء زر قابل للنقر عليه.
الشيء المهم الذي يجب ملاحظته هنا هو أنه عندما تقوم بإنشاء التسمية وكائنات btn، فإنك تقوم بتمرير كائن النافذة (w) إلى منشئي QLabel وQPushButton. هذه هي الطريقة التي يعمل بها التداخل في PyQt5. لإنشاء عنصر واجهة مستخدم داخل عنصر واجهة مستخدم آخر، يمكنك تمرير مرجع عنصر واجهة المستخدم الأصل إلى المُنشئ التابع.
label.move(100,130) btn.move(110,150)
يتم استخدام move() لتعيين موضع عنصر واجهة المستخدم فيما يتعلق بعنصر واجهة المستخدم الأصلي الخاص به. في الحالة الأولى، سيتم نقل الملصق بمقدار 100 بكسل من اليسار و130 بكسل من أعلى النافذة.
وبالمثل، سيتم وضع الزر على بعد 110 بكسل من اليسار و150 بكسل من أعلى النافذة. يعد هذا المثال طريقة بدائية لتحقيق التخطيطات ولا يُستخدم عمومًا في الإنتاج؛ يتم تضمينه هنا فقط لأغراض التعلم. يدعم Qt التخطيطات المختلفة التي ستراها بالتفصيل في الأقسام القادمة من هذا البرنامج التعليمي لـ PyQt.
btn.clicked.connect(dialog)
وأخيرا، هذا مثال على الإشارات والفتحات في كيو تي. في التطبيقات المعتمدة على واجهة المستخدم الرسومية، يتم تنفيذ الوظائف بناءً على الإجراءات التي يقوم بها المستخدم، مثل التمرير فوق عنصر ما أو النقر فوق زر. وتسمى هذه الإجراءات أحداث. تذكر أن الأسلوب app.exec_() ينقل التحكم إلى Qt حدث-حلقة. هذا هو الغرض من حلقة الحدث: الاستماع إلى الأحداث وتنفيذ الإجراءات استجابةً لها.
عندما يحدث حدث، مثل قيام المستخدم بالنقر فوق زر، فإن عنصر واجهة مستخدم Qt المقابل يثير ملف بسيطة. يمكن توصيل هذه الإشارات وظائف بايثون (مثل وظيفة الحوار في هذا المثال) بحيث يتم تنفيذ الوظيفة عند تشغيل الإشارة. تسمى هذه الوظائف فتحات في لغة كيو تي.
وبعد ذلك، يكون بناء الجملة الأساسي لتشغيل وظيفة الفتحة استجابة للإشارة الواردة من حدث ما كما يلي
widget.signal.connect(slot)
مما يعني أنه كلما أ بسيطة يتم تشغيله بواسطة أ القطعة، المتصل فتحة سيتم تنفيذ الوظيفة. باختصار، يتم استخدام الإشارات والفتحات بواسطة Qt للتواصل بين الكائنات وتسهيل إمكانية إعادة استخدام المكونات والتفاعل.
الآن بعد أن عرفت كيفية تداخل الأدوات وتنفيذ التفاعلات باستخدام الإشارات والفتحات، إليك قائمة بالأدوات المفيدة والفئات الأخرى التي يمكنك استخدامها في تطبيقات PyQt.
المكونات والحاجيات
هناك عدد كبير من الأدوات المتاحة في PyQt لإنشاء تطبيقات واجهة المستخدم الرسومية. ومع ذلك، مع PyQt5، كان هناك إعادة توزيع للفئات إلى وحدات مختلفة ومراجعات في التراخيص.
لذلك، من المهم أن يكون لديك رؤية عالية المستوى لبنية PyQt5. في هذا القسم، ستشاهد كيفية تنظيم PyQt5 داخليًا وستتعرف على الوحدات والمكتبات وفئات واجهة برمجة التطبيقات المختلفة التي يوفرها PyQt5.
هيكل دليل PyQt5
هذه هي الوحدات الأساسية المستخدمة من قبل Pythonربط Qt، وتحديدًا PyQt5.
- Qt: فهو يجمع جميع الفئات/الوحدات المذكورة أدناه في وحدة واحدة. إنه يزيد بشكل كبير من الذاكرة التي يستخدمها التطبيق. ومع ذلك، من الأسهل إدارة إطار العمل عن طريق استيراد وحدة واحدة فقط.
- كيو تي كور: يحتوي على الفئات غير الرسومية الأساسية التي تستخدمها الوحدات الأخرى. هذا هو المكان الذي يتم فيه تنفيذ حلقة حدث Qt والإشارات واتصال الفتحة وما إلى ذلك.
- QtWidgets: يحتوي على معظم الأدوات المتوفرة في Pyqt5.
- QtGui: يحتوي على مكونات واجهة المستخدم الرسومية ويمتد إلى وحدة QtCore.
- كيو تي نتورك: يحتوي على الفئات المستخدمة لتنفيذ برمجة الشبكات من خلال كيو تي. وهو يدعم خوادم TCP، ومآخذ TCP، ومآخذ UDP، ومعالجة SSL، وجلسات الشبكة، وعمليات بحث DNS.
- كيو تي الوسائط المتعددة يوفر وظائف الوسائط المتعددة ذات المستوى المنخفض.
- كيو تي اس كيو ال: ينفذ تكامل قاعدة البيانات لقواعد بيانات SQL. يدعم أودبك، MySQL, Oracle, SQLiteو PostgreSQL.
أدوات PyQt5
فيما يلي قائمة بالأدوات الأكثر استخدامًا في PyQt5
- QLineEdit: هذا حقل إدخال يسمح للمستخدم بإدخال سطر واحد من النص.
line = QLineEdit()
- QRdioButton: هذا حقل إدخال يحتوي على زر قابل للتحديد، يشبه أزرار الاختيار في لغة HTML.
rad = QRadioButton("button title") rad.setChecked(True) #to select the button by default.
- كيو كومبوBox: يتم استخدامه لعرض قائمة منسدلة تحتوي على قائمة بالعناصر القابلة للتحديد.
drop = QComboBox(w) drop.addItems(["item one", "item two", "item three"])
- كيو تشيكBox:يعرض مربعًا قابلًا للاختيار أمام الملصق الذي يتم تحديده إذا تم تحديده، على غرار أزرار الاختيار.
check = QCheckBox("button title")
- كمينوبار: يعرض شريط قوائم أفقيًا أعلى النافذة. يمكنك فقط إضافة كائنات من فئة QMenu إلى هذا الشريط. يمكن أن تحتوي كائنات QMenu أيضًا على سلاسل أو كائنات QAction أو كائنات QMenu أخرى.
- QToolBar: عبارة عن شريط أو جزء أفقي يمكن تحريكه داخل النافذة. قد تحتوي على أزرار وعناصر واجهة مستخدم أخرى.
- كيوتاب: يتم استخدامه لتقسيم محتويات النافذة إلى صفحات متعددة يمكن الوصول إليها من خلال علامات تبويب مختلفة أعلى الأداة. ويتكون من قسمين: شريط علامات التبويب وصفحة علامات التبويب.
- QScrollBar: يتم استخدامه لإنشاء أشرطة التمرير التي تسمح للمستخدم بالتمرير لأعلى ولأسفل داخل النافذة. يتكون من شريط تمرير متحرك ومسار شريط تمرير وزرين لتمرير شريط التمرير لأعلى أو لأسفل.
scroll = QScrollBar()
- QSplitter: يتم استخدام المقسمات لفصل محتويات النافذة بحيث يتم تجميع الأدوات بشكل صحيح ولا تظهر مزدحمة. يعد QSplitter أحد معالجات التخطيط الأساسية المتوفرة في PyQt5 ويستخدم لتقسيم المحتوى أفقيًا وعموديًا.
- كيو دوك: عنصر واجهة المستخدم عبارة عن نافذة فرعية تحتوي على خاصيتين:
- يمكن نقله داخل النافذة الرئيسية و
- ويمكن إرساءه خارج النافذة الرئيسية إلى موقع آخر على الشاشة.
التخطيطات والموضوعات
في أمثلة PyQt5 السابقة، كنت تستخدم فقط أساليب move() و resize() لتعيين مواضع الأدوات في واجهة المستخدم الرسومية الخاصة بك.
ومع ذلك، يمتلك PyQt محركًا قويًا لإدارة التخطيط والذي يمكن استخدامه لإنشاء واجهات مستخدم متقدمة للتطبيقات. في هذا القسم، ستتعرف على فئتين مهمتين يتم استخدامهما في Qt لإنشاء التخطيطات وإدارتها.
- QBoxتصميم
- QGridLayout
QBoxتصميم
QBoxيتم استخدام التخطيط لمحاذاة عناصر واجهة المستخدم التابعة للتخطيط في صف أفقي أو رأسي. فئتا الاهتمام التي ترث من QBoxالتخطيط هي:
- QHBoxالتخطيط: يستخدم لتخطيط عناصر واجهة المستخدم الفرعية أفقيًا.
- QVBoxالتخطيط: يستخدم لتخطيط عناصر واجهة المستخدم الفرعية عموديًا.
على سبيل المثال، هذه هي الطريقة التي تتماشى بها ثلاثة أزرار مع QHBoxسيبدو التخطيط.
import sys
from PyQt5.QtWidgets import *
if __name__ == "__main__":
app = QApplication([])
w = QWidget()
w.setWindowTitle("Musketeers")
btn1 = QPushButton("Athos")
btn2 = QPushButton("Porthos")
btn3 = QPushButton("Aramis")
hbox = QHBoxLayout(w)
hbox.addWidget(btn1)
hbox.addWidget(btn2)
hbox.addWidget(btn3)
w.show()
sys.exit(app.exec_())
وهذه هي الطريقة التي سيبدو بها في QVBoxتخطيط.
import sys
from PyQt5.QtWidgets import *
if __name__ == "__main__":
app = QApplication([])
w = QWidget()
w.setWindowTitle("Musketeers")
btn1 = QPushButton("Athos")
btn2 = QPushButton("Porthos")
btn3 = QPushButton("Aramis")
vb = QVBoxLayout(w)
vb.addWidget(btn1)
vb.addWidget(btn2)
vb.addWidget(btn3)
w.show()
sys.exit(app.exec_())
الوظيفة الوحيدة التي تحتاج إلى أي شرح في هذه المرحلة هي طريقة addWidget(). يتم استخدامه لإدراج عناصر واجهة المستخدم في ملف HBox أو V.Box تَخطِيط. يتم استخدامه أيضًا في التخطيطات الأخرى حيث يأخذ عددًا مختلفًا من المعلمات كما ستشاهد في القسم التالي. ستظهر عناصر واجهة المستخدم داخل التخطيط بالترتيب الذي أدخلتها به.
QGridLayout
يتم استخدام QGridLayout لإنشاء واجهات يتم فيها وضع عناصر واجهة المستخدم على شكل شبكة (مثل مصفوفة أو صفيف ثنائي الأبعاد). لإدراج عناصر في تخطيط الشبكة، يمكنك استخدام تمثيل المصفوفة لتحديد عدد الصفوف والأعمدة في الشبكة بالإضافة إلى موضع تلك العناصر.
على سبيل المثال، لإنشاء شبكة 3*3 (أي شبكة مكونة من ثلاثة صفوف وثلاثة أعمدة)، سوف تكتب الكود التالي:
Import sys
from PyQt5.QtWidgets import *
if __name__ == "__main__":
app = QApplication([])
w = QWidget()
grid = QGridLayout(w)
for i in range(3):
for j in range(3):
grid.addWidget(QPushButton("Button"),i,j)
w.show()
sys.exit(app.exec_())
سيكون هذا هو الناتج:
تأخذ طريقة addWidget() في تخطيط الشبكة هذه الوسائط:
- كائن عنصر واجهة المستخدم الذي تريد إضافته إلى الشبكة
- الإحداثي x للكائن
- الإحداثي y للكائن
- امتداد الصف (الافتراضي =0)
- النطاق العمودي (الافتراضي=0)
لفهم ذلك بشكل أفضل، يمكنك إدراج كل عنصر واجهة مستخدم يدويًا كما هو موضح أدناه
import sys
from PyQt5.QtWidgets import *
if __name__ == "__main__":
app = QApplication([])
w = QWidget()
grid = QGridLayout(w)
grid.addWidget(QPushButton("Button one"),0,0)
grid.addWidget(QPushButton("Button two"),0,1)
grid.addWidget(QPushButton("Button three"),1,0)
grid.addWidget(QPushButton("Button four"),1,1)
w.show()
sys.exit(app.exec_())
وهذا ما ستبدو عليه الشبكة:
يمكنك أيضًا تمرير معلماتrowspan وcolspan إلى addWidget() لتشمل أكثر من صف أو عمود.
على سبيل المثال،
grid.addWidget(QPushButton("Button five"),2,0,1,0)
سيؤدي هذا إلى إنشاء زر يمتد فوق كلا العمودين.
المواضيع
يأتي PyQt5 مزودًا ببعض السمات المضمنة التي يمكنك استخدامها في تطبيقاتك. ال سيت ستايل () يتم استخدام الطريقة التي يتم استدعاؤها على مثيل QApplication لتعيين سمة معينة لتطبيقك.
على سبيل المثال، سيؤدي إضافة سطر التعليمات البرمجية التالي إلى تغيير سمة تطبيقك من الافتراضي إلى Fusion
app.setStyle("Fusion")
هذه هي الطريقة التي سيبدو بها المثال السابق في Fusion Theme
وظيفة أخرى مفيدة لتصميم تطبيقاتك هي طريقة setPalette() . إليك الكود الخاص بتغيير لون عناصر واجهة المستخدم المختلفة باستخدام setPalette().
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPalette
if __name__ == "__main__":
app = QApplication([])
app.setStyle("Fusion")
qp = QPalette()
qp.setColor(QPalette.ButtonText, Qt.black)
qp.setColor(QPalette.Window, Qt.black)
qp.setColor(QPalette.Button, Qt.gray)
app.setPalette(qp)
w = QWidget()
grid = QGridLayout(w)
grid.addWidget(QPushButton("Button one"),0,0)
grid.addWidget(QPushButton("Button two"),0,1)
grid.addWidget(QPushButton("Button three"),1,0)
grid.addWidget(QPushButton("Button four"),1,1)
w.show()
sys.exit(app.exec_())
ها هي النتيجة.
لاستخدام طريقة setPalette()، عليك أولاً تحديد لوحة الألوان. يتم ذلك عن طريق إنشاء كائن من فئة QPalette.
qp = QPalette()
لاحظ أن فئة QPalette تنتمي إلى وحدة QtGui وستحتاج إلى استيرادها حتى يعمل هذا. بمجرد إنشاء كائن QPalette، استخدم طريقة setColor() لتمرير اسم عنصر واجهة المستخدم الذي تريد تغيير لونه واللون الذي تريد تعيينه.
qp.setColor(QPalette.Window, Qt.black)
سيؤدي هذا إلى تغيير لون النافذة إلى اللون الأسود. بعد تحديد نظام الألوان الخاص بك، استخدم وظيفة setPalette() لتطبيق اللوحة على التطبيق الخاص بك.
app.setPalette(qp)
هذا هو كل ما عليك فعله إذا كنت تريد إنشاء بعض السمات الأساسية لتطبيقك. يتيح لك PyQt أيضًا استخدام أوراق الأنماط لتحديد مظهر عناصر واجهة المستخدم الخاصة بك. إذا كنت معتادًا على لغة CSS، فيمكنك بسهولة تحديد الأنماط المتقدمة لتطبيقك باستخدام Qt Style Sheets.
ملخص
- PyQt هو رابط بايثون لـ C++ إطار واجهة المستخدم، كيو تي.
- PyQt4 وPyQt5 هما الإصداران الرئيسيان اللذان طورتهما شركة Riverbank Computing.
- الوحدات الرئيسية لإطار عمل PyQt هي:
- Qt
- كيو تي كور
- QtWidgets
- QtGui
- كيو تي اس كيو ال
- كيو تي نتورك
- يدعم PyQt العديد من الأدوات مثل:
- أزرار
- تسميات النص
- الحقول النصية
- أزرار الراديو ومربعات الاختيار
- أشرطة الأدوات وأشرطة القوائم
- طقم الويب
- علامات التبويب
- Docks
- في PyQt، يتم تنفيذ التفاعل باستخدام إشارات و فتحات.
- An حدث هو إجراء يقوم به المستخدم في واجهة المستخدم الرسومية (مثل النقر فوق زر).
- A بسيطة يتم رفعه بواسطة الأداة المقابلة عند وقوع حدث عليها.
- A فتحة هي وظيفة متصلة بالإشارة ويتم تنفيذها عند رفع الإشارة.
- يتمتع PyQt بمحرك تخطيط قوي ويدعم تصميم وإدارة التخطيط المتقدم. هناك نوعان من مخططات التخطيط المستخدمة بشكل متكرر في PyQt:
- Box تصميم
- تخطيط الشبكة
- يسمح لك مصمم PyQt بإنشاء سمات مخصصة لتطبيق واجهة المستخدم الرسومية ولديه دعم مدمج لأوراق الأنماط.
- كيو تي كريتور Python يمكن استخدامها لإنشاء واجهات المستخدم بالإضافة إلى التطبيقات المستقلة.












