PyQt5 ट्यूटोरियल उदाहरणों के साथ: PyQt का उपयोग करके GUI डिज़ाइन करें Python

PyQt क्या है?

पीईक्यूटी ओपन-सोर्स विजेट-टूलकिट Qt का पायथन बाइंडिंग है, जो क्रॉस-प्लेटफ़ॉर्म एप्लिकेशन डेवलपमेंट फ़्रेमवर्क के रूप में भी काम करता है। Qt एक लोकप्रिय C++ सभी प्रमुख डेस्कटॉप, मोबाइल और एम्बेडेड प्लेटफ़ॉर्म के लिए GUI अनुप्रयोग लिखने के लिए फ्रेमवर्क (लिनक्स का समर्थन करता है, Windows, मैक ओ एस, Android, आईओएस, रास्पबेरी पाई, और अधिक)।

PyQt एक निःशुल्क सॉफ्टवेयर है, जिसका विकास और रखरखाव इंग्लैंड स्थित रिवरबैंक कंप्यूटिंग नामक कंपनी द्वारा किया जाता है, जबकि Qt का विकास फिनिश फर्म The Qt Company द्वारा किया जाता है।

PyQT की विशेषताएं

PyQt की महत्वपूर्ण विशेषताएं इस प्रकार हैं:

PyQt सीखें जिसमें छह सौ से अधिक कक्षाएं शामिल हैं, जिनमें कई विशेषताएं शामिल हैं जैसे

  • ग्राफिकल यूजर इंटरफेस
  • SQL डेटाबेस
  • वेब टूलकिट
  • XML प्रसंस्करण
  • शुद्ध कार्यशील

इन सुविधाओं को उन्नत UI के साथ-साथ स्टैंडअलोन एप्लिकेशन बनाने के लिए संयोजित किया जा सकता है। सभी उद्योगों की कई प्रमुख कंपनियाँ Qt का उपयोग करती हैं। कुछ उदाहरण हैं LG, Mercedes, AMD, Panasonic, Harman, आदि।

PyQt संस्करण

PyQt दो संस्करणों में उपलब्ध है, PyQt4 और PyQt5। PyQt4 Qt फ्रेमवर्क के 4.x और 5.x संस्करणों को बांधने के लिए ग्लू कोड प्रदान करता है जबकि PyQt5 केवल 5.x संस्करणों के लिए बाइंडिंग प्रदान करता है। परिणामस्वरूप, PyQt5 पुराने संस्करण के अप्रचलित मॉड्यूल के साथ पिछड़ा संगत नहीं है। इस Qt GUI ट्यूटोरियल में, उदाहरणों के प्रदर्शन के लिए PyQt5 का उपयोग किया जाएगा। इन दो संस्करणों के अलावा,

रिवरबैंक कंप्यूटिंग PyQt3D भी प्रदान करता है - Qt3D फ्रेमवर्क के लिए पायथन बाइंडिंग। Qt3D एक एप्लीकेशन फ्रेमवर्क है जिसका उपयोग 2D/3D रेंडरिंग के साथ वास्तविक समय सिमुलेशन सिस्टम बनाने के लिए किया जाता है।

PyQt5 कैसे स्थापित करें

इस PyQt5 ट्यूटोरियल में, हम PyQt को स्थापित करने के दो तरीके देखेंगे:

  • व्हील फ़ाइलों का उपयोग करना
  • स्रोत से निर्माण और स्थापना

Qt (उच्चारण क्यूट) एक जटिल प्रणाली है, और PyQt कोडबेस में संकलित जानकारी शामिल है C++ और Python हुड के नीचे कोड। नतीजतन, अन्य पायथन लाइब्रेरीज़ की तुलना में इसे स्रोत से बनाना और इंस्टॉल करना एक जटिल प्रक्रिया है। हालाँकि, आप पहियों का उपयोग करके आसानी से PyQt5 इंस्टॉल कर सकते हैं।

पहियों के साथ स्थापना

पहिए नए मानक हैं Python पैकेजिंग और वितरण प्रारूप। सरल शब्दों में कहें तो, व्हील एक ज़िप संग्रह है जिसका एक विशेष नाम और .whl फ़ाइल एक्सटेंशन। पहियों को pip ( का उपयोग करके स्थापित किया जा सकता हैPythonपैकेज मैनेजर), जो कि हाल के संस्करणों में डिफ़ॉल्ट रूप से शामिल है Python.

तो, अगर आपके पास Python 3.4 या बाद का संस्करण इंस्टॉल है, तो आपके पास पहले से ही pip है। हालाँकि, यदि आप पुराने संस्करण का उपयोग कर रहे हैं Python, आगे बढ़ने से पहले आपको pip डाउनलोड और इंस्टॉल करना होगा। आप इस लिंक पर इसके लिए निर्देश खोज सकते हैं: https://pypi.org/project/pip/.

PyQt5 को स्थापित करने के लिए,

चरण 1) कमांड प्रॉम्प्ट खोलें।
अपने कंप्यूटर में कमांड प्रॉम्प्ट या पावरशेल खोलें Windows मशीन।

PyQt5 स्थापित करें

चरण 2) निम्नलिखित टाइप करें.

 pip install PyQt5

चरण 3) स्थापना सफल.
इस PyQt5 ट्यूटोरियल में यह चरण PyQt5 whl पैकेज (लगभग 50 एमबी) को डाउनलोड करेगा और इसे आपके सिस्टम पर इंस्टॉल करेगा।

PyQt5 स्थापित करें

वैकल्पिक रूप से, आप एक डाउनलोड भी कर सकते हैं Windows आपके कंप्यूटर पर स्थापित पायथन के संस्करण के लिए बाइनरी।

एक बार यह पूरा हो जाने पर, अपना पहला GUI ऐप लिखने के लिए इस PyQt5 ट्यूटोरियल के अगले अनुभाग पर आगे बढ़ें।

बेसिक PyQt 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 Concepts

बढ़िया! यह काम कर रहा है। यह ज़्यादा नहीं है, लेकिन बुनियादी बातों को समझने के लिए यह पर्याप्त है। अब इस PyQt ट्यूटोरियल में, आइए विस्तार से देखें कि आपके प्रोग्राम की प्रत्येक लाइन क्या करती है।

from PyQt5.QtWidgets import QApplication, QWidget

यह कथन GUI बनाने के लिए आवश्यक सभी मॉड्यूल को वर्तमान नामस्थान में आयात करता है। QtWidgets मॉड्यूल में वे सभी प्रमुख विजेट शामिल हैं जिनका आप इस मॉड्यूल में उपयोग करेंगे। Python क्यूटी ट्यूटोरियल.

app = QApplication(sys.argv)

यहाँ, आप QApplication क्लास का ऑब्जेक्ट बना रहे हैं। यह चरण PyQt5 के लिए एक अनिवार्यता है; प्रत्येक UI ऐप को QApplication का एक इंस्टेंस बनाना चाहिए, जो ऐप में प्रवेश बिंदु के रूप में हो। यदि आप इसे नहीं बनाते हैं, तो त्रुटियाँ दिखाई जाएँगी।

sys.argv कमांड-लाइन पैरामीटर्स की सूची है जिसे आप शेल के माध्यम से एप्लिकेशन लॉन्च करते समय या इंटरफ़ेस को स्वचालित करते समय पास कर सकते हैं।

इस PyQt5 उदाहरण में, आपने QApplications को कोई तर्क नहीं दिया। इसलिए, आप इसे नीचे दिए गए कोड से भी बदल सकते हैं और आपको sys मॉड्यूल को आयात करने की भी आवश्यकता नहीं है।

app = QApplication([])
w = QWidget()

इसके बाद, हम QWidget क्लास का एक ऑब्जेक्ट बनाते हैं। QWidget Qt में सभी UI ऑब्जेक्ट का बेस क्लास है, और वस्तुतः आप ऐप में जो कुछ भी देखते हैं वह एक विजेट है। इसमें डायलॉग, टेक्स्ट, बटन, बार, इत्यादि शामिल हैं। वह विशेषता जो आपको जटिल उपयोगकर्ता इंटरफ़ेस डिज़ाइन करने की अनुमति देती है वह यह है कि विजेट को नेस्ट किया जा सकता है, यानी, आप एक विजेट के अंदर एक विजेट रख सकते हैं, जो एक और विजेट के अंदर है। आप इसे अगले अनुभाग में क्रियान्वित होते हुए देखेंगे।

w.resize(300,300)

QWidget क्लास की रीसाइज़ विधि आपको किसी भी विजेट के आयाम सेट करने की अनुमति देती है। इस मामले में, आपने विंडो का आकार 300px x 300px कर दिया है।

यहां, आपको यह याद रखना चाहिए कि विजेट्स को एक साथ नेस्ट किया जा सकता है, सबसे बाहरी विजेट (अर्थात, बिना पैरेंट वाला विजेट) को विंडो कहा जाता है।

w.setWindowTitle("Guru99")

setWindowTitle() विधि आपको एक स्ट्रिंग को एक तर्क के रूप में पास करने की अनुमति देती है जो आपके द्वारा पास की गई स्ट्रिंग पर विंडो का शीर्षक सेट करेगी। PyQt5 उदाहरण में, शीर्षक बार गुरु99 प्रदर्शित करेगा।

w.show()

शो() केवल मॉनिटर स्क्रीन पर विजेट प्रदर्शित करता है।

sys.exit(app.exec_())

app.exec_() विधि Qt/ को प्रारंभ करती हैC++ इवेंट लूप। जैसा कि आप जानते हैं, PyQt को बड़े पैमाने पर लिखा गया है C++ और समानांतर निष्पादन को लागू करने के लिए इवेंट लूप तंत्र का उपयोग करता है। app.exec_() नियंत्रण को Qt को सौंपता है जो केवल तभी एप्लिकेशन से बाहर निकलेगा जब उपयोगकर्ता इसे GUI से बंद कर देगा। यही कारण है कि 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 नीचे दिखाए अनुसार कुछ टेक्स्ट और एक बटन के साथ एक नई विंडो खुलेगी।

खालीपन से परे Windows

  1. जब आप पहली विंडो में बटन पर क्लिक करेंगे तो आपके द्वारा लिखा गया टेक्स्ट सहित एक नया संदेश बॉक्स खुल जाएगा।
  2. अब आप अतिरिक्त पाठ की दृश्यता को बदलने के लिए विवरण छिपाएं/विवरण दिखाएं बटन पर क्लिक कर सकते हैं।

जैसा कि आप देख सकते हैं, चूंकि हमने संदेश बॉक्स में कोई विंडो शीर्षक सेट नहीं किया था, इसलिए पाइथन द्वारा ही एक डिफ़ॉल्ट शीर्षक प्रदान किया गया था।

अब जब यह काम कर रहा है तो आइए उस अतिरिक्त कोड पर नज़र डालें जिसे आपने पिछले 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_()

यहां, आपने dialog नामक एक विधि परिभाषित की है जो एक संदेश बॉक्स विजेट बनाती है और बटनों और अन्य फ़ील्डों में कुछ पाठ सेट करती है।

डायलॉग विधि को प्रोग्राम के मुख्य ब्लॉक से तब कॉल किया जाता है जब किसी विशिष्ट विजेट (इस मामले में, बटन पुशबटन) में कोई बटन दबाया जाता है। उस बटन पर ट्रिगर किया गया क्लिक इवेंट इस फ़ंक्शन को निष्पादित करता है। इस तरह के फ़ंक्शन को 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 का उपयोग क्लिक करने योग्य बटन बनाने के लिए किया जाता है।

यहाँ ध्यान देने वाली महत्वपूर्ण बात यह है कि जब आप लेबल और बटन ऑब्जेक्ट बनाते हैं, तो आप QLabel और QPushButton के कंस्ट्रक्टर को विंडो ऑब्जेक्ट (w) पास कर रहे होते हैं। PyQt5 में नेस्टिंग इस तरह काम करती है। किसी दूसरे विजेट के अंदर विजेट बनाने के लिए, आप पैरेंट विजेट का संदर्भ चाइल्ड के कंस्ट्रक्टर को पास करते हैं।

label.move(100,130)
btn.move(110,150)

move() का उपयोग किसी विजेट की स्थिति को उसके पैरेंट विजेट के सापेक्ष सेट करने के लिए किया जाता है। पहले मामले में, लेबल को विंडो के बाईं ओर से 100px और शीर्ष से 130px स्थानांतरित किया जाएगा।

इसी तरह, बटन को बाईं ओर से 110px और विंडो के शीर्ष से 150px की दूरी पर रखा जाएगा। यह उदाहरण लेआउट प्राप्त करने का एक अपरिष्कृत तरीका है और आमतौर पर उत्पादन में इसका उपयोग नहीं किया जाता है; इसे केवल सीखने के उद्देश्य से यहाँ शामिल किया गया है। Qt विभिन्न लेआउट का समर्थन करता है जिन्हें आप इस PyQt ट्यूटोरियल के आगामी अनुभागों में विस्तार से देखेंगे।

btn.clicked.connect(dialog)

अंत में, यह Qt में सिग्नल और स्लॉट का एक उदाहरण है। GUI आधारित अनुप्रयोगों में, फ़ंक्शन उपयोगकर्ता द्वारा की गई क्रियाओं के आधार पर निष्पादित होते हैं, जैसे किसी तत्व पर होवर करना या बटन पर क्लिक करना। इन क्रियाओं को कहा जाता है घटनाओंयाद रखें कि app.exec_() विधि नियंत्रण को Qt में स्थानांतरित करती है प्रतिस्पर्धा-लूप। इवेंट लूप इसी लिए है: इवेंट को सुनने के लिए और प्रतिक्रिया में क्रियाएं करने के लिए।

जब भी कोई घटना घटित होती है, जैसे कि कोई उपयोगकर्ता किसी बटन पर क्लिक करता है, तो संबंधित Qt विजेट एक संदेश भेजता है संकेतइन संकेतों को निम्न से जोड़ा जा सकता है पायथन फ़ंक्शन (इस उदाहरण में डायलॉग फ़ंक्शन की तरह) ताकि सिग्नल ट्रिगर होने पर फ़ंक्शन निष्पादित हो। इन फ़ंक्शन को कहा जाता है स्लॉट्स क्यूटी लिंगो में.

इसके बाद, किसी घटना से संकेत के जवाब में स्लॉट फ़ंक्शन को ट्रिगर करने के लिए मूल सिंटैक्स इस प्रकार है

 widget.signal.connect(slot)

इसका मतलब यह है कि जब भी कोई संकेत द्वारा ट्रिगर किया जाता है विजेटजुड़ा हुआ स्लॉट फ़ंक्शन निष्पादित किया जाएगा। संक्षेप में, सिग्नल और स्लॉट का उपयोग Qt द्वारा ऑब्जेक्ट्स के बीच संचार करने और घटक पुन: प्रयोज्यता और अन्तरक्रियाशीलता को सुविधाजनक बनाने के लिए किया जाता है।

अब जब आप जानते हैं कि विजेट्स को कैसे नेस्ट किया जाए और सिग्नल्स और स्लॉट्स का उपयोग करके इंटरैक्शन को कैसे लागू किया जाए, तो यहां उपयोगी विजेट्स और अन्य क्लासेस की एक सूची दी गई है, जिन्हें आप अपने PyQt ऐप्स में उपयोग कर सकते हैं।

घटक और विजेट

PyQt में GUI ऐप बनाने के लिए बड़ी संख्या में विजेट उपलब्ध हैं। हालाँकि, PyQt5 के साथ, लाइसेंस में संशोधन और विभिन्न मॉड्यूल में कक्षाओं का फेरबदल हुआ है।

इसलिए, PyQt5 की संरचना का उच्च-स्तरीय दृश्य होना महत्वपूर्ण है। इस अनुभाग में, आप देखेंगे कि PyQt5 आंतरिक रूप से कैसे व्यवस्थित है और PyQt5 द्वारा प्रदान किए गए विभिन्न मॉड्यूल, लाइब्रेरी और API क्लास के बारे में जानेंगे।

PyQt5 निर्देशिका संरचना

PyQt5 निर्देशिका संरचना

ये मूलभूत मॉड्यूल हैं जिनका उपयोग किया जाता है Python's Qt बाइंडिंग, विशेष रूप से PyQt5.

  • Qt: यह नीचे बताए गए सभी क्लास/मॉड्यूल को एक ही मॉड्यूल में जोड़ता है। यह एप्लिकेशन द्वारा उपयोग की जाने वाली मेमोरी को काफी हद तक बढ़ाता है। हालाँकि, केवल एक मॉड्यूल आयात करके फ्रेमवर्क को प्रबंधित करना आसान है।
  • क्यूटीकोर: इसमें अन्य मॉड्यूल द्वारा उपयोग किए जाने वाले मुख्य गैर-ग्राफ़िकल क्लास शामिल हैं। यहीं पर Qt इवेंट लूप, सिग्नल और स्लॉट-कनेक्टिविटी आदि को लागू किया जाता है।
  • Qtविजेट्स: इसमें Pyqt5 में उपलब्ध अधिकांश विजेट्स सम्मिलित हैं।
  • क्यूटीगुई: इसमें GUI घटक शामिल हैं और यह QtCore मॉड्यूल का विस्तार करता है।
  • क्यूटीनेटवर्क: इसमें Qt के माध्यम से नेटवर्क प्रोग्रामिंग को लागू करने के लिए उपयोग की जाने वाली कक्षाएं शामिल हैं। यह TCP सर्वर, TCP सॉकेट, UDP सॉकेट, SSL हैंडलिंग, नेटवर्क सत्र और DNS लुकअप का समर्थन करता है।
  • क्यूटीमल्टीमीडिया निम्न-स्तरीय मल्टीमीडिया कार्यक्षमता प्रदान करता है।
  • क्यूटीएसक्यूएल: SQL डेटाबेस के लिए डेटाबेस एकीकरण लागू करता है। ODBC का समर्थन करता है, MySQL, Oracle, SQLite, तथा PostgreSQL.

PyQt5 विजेट

PyQt5 में सबसे अधिक उपयोग किए जाने वाले विजेट्स की सूची यहां दी गई है

  • क्यूलाइनसंपादित करेंयह एक इनपुट फ़ील्ड है जो उपयोगकर्ता को एक पंक्ति का पाठ दर्ज करने की अनुमति देता है।
    line = QLineEdit()
  • क्यूरेडियोबटनयह एक चयन योग्य बटन वाला इनपुट फ़ील्ड है, जो 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 ऑब्जेक्ट शामिल हो सकते हैं।
  • क्यूटूलबार: यह एक क्षैतिज पट्टी या फलक है जिसे विंडो के भीतर ले जाया जा सकता है। इसमें बटन और अन्य विजेट हो सकते हैं।
  • क्यूटैब: इसका उपयोग विंडो की सामग्री को कई पृष्ठों में विभाजित करने के लिए किया जाता है, जिन्हें विजेट के शीर्ष पर विभिन्न टैब के माध्यम से एक्सेस किया जा सकता है। इसमें दो खंड होते हैं: टैब बार और टैब पेज।
  • क्यूस्क्रॉलबार: इसका उपयोग स्क्रॉल बार बनाने के लिए किया जाता है जो उपयोगकर्ता को विंडो के भीतर ऊपर और नीचे स्क्रॉल करने की अनुमति देता है। इसमें एक मूवेबल स्लाइडर, एक स्लाइडर ट्रैक और स्लाइडर को ऊपर या नीचे स्क्रॉल करने के लिए दो बटन होते हैं।
    scroll = QScrollBar()
  • क्यूस्प्लिटरस्प्लिटर्स का उपयोग विंडो की सामग्री को अलग करने के लिए किया जाता है ताकि विजेट ठीक से समूहीकृत हो जाएं और अव्यवस्थित न दिखें। QSplitter PyQt5 में उपलब्ध प्राथमिक लेआउट हैंडलर्स में से एक है और इसका उपयोग सामग्री को क्षैतिज और लंबवत दोनों तरह से विभाजित करने के लिए किया जाता है।
  • क्यूडॉकडॉक विजेट एक उप-विंडो है जिसमें दो गुण होते हैं:
  • इसे मुख्य विंडो के भीतर ले जाया जा सकता है और
  • इसे मूल विंडो के बाहर स्क्रीन पर किसी अन्य स्थान पर डॉक किया जा सकता है।

लेआउट और थीम

पिछले PyQt5 उदाहरणों में, आप अपने GUI में विजेट्स की स्थिति निर्धारित करने के लिए केवल move() और resize() विधियों का उपयोग कर रहे हैं।

हालाँकि, PyQt में एक मजबूत लेआउट प्रबंधन इंजन है जिसका उपयोग अनुप्रयोगों के लिए उन्नत उपयोगकर्ता इंटरफ़ेस बनाने के लिए किया जा सकता है। इस अनुभाग में, आप दो महत्वपूर्ण वर्गों के बारे में जानेंगे जिनका उपयोग Qt में लेआउट बनाने और प्रबंधित करने के लिए किया जाता है।

  1. QBoxख़ाका
  2. क्यूग्रिडलेआउट

QBoxख़ाका

QBoxलेआउट का उपयोग लेआउट के चाइल्ड विजेट को क्षैतिज या ऊर्ध्वाधर पंक्ति में संरेखित करने के लिए किया जाता है। Q से विरासत में प्राप्त होने वाली दो रुचिकर श्रेणियाँBoxलेआउट हैं:

  • QHBoxलेआउट: चाइल्ड विजेट को क्षैतिज रूप से पंक्तिबद्ध करने के लिए उपयोग किया जाता है।
  • QVBoxलेआउट: चाइल्ड विजेट को लंबवत रूप से पंक्तिबद्ध करने के लिए उपयोग किया जाता है।

उदाहरण के लिए, इस प्रकार तीन बटन QH के साथ संरेखित हैंBoxलेआउट दिखेगा.

QBoxख़ाका

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_())

और वे QV में इस तरह दिखेंगेBoxलेआउट।

QBoxख़ाका

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() विधि है। इसका उपयोग H में विजेट्स डालने के लिए किया जाता हैBox या वीBox लेआउट। इसका उपयोग अन्य लेआउट में भी किया जाता है जहाँ यह अलग-अलग संख्या में पैरामीटर लेता है जैसा कि आप अगले अनुभाग में देखेंगे। विजेट लेआउट के अंदर उसी क्रम में दिखाई देंगे जिस क्रम में आप उन्हें सम्मिलित करते हैं।

क्यूग्रिडलेआउट

QGridLayout का उपयोग ऐसे इंटरफ़ेस बनाने के लिए किया जाता है जिसमें विजेट्स को ग्रिड (मैट्रिक्स या 2D सरणी की तरह) के रूप में रखा जाता है। ग्रिड लेआउट में तत्वों को सम्मिलित करने के लिए, आप ग्रिड में पंक्तियों और स्तंभों की संख्या और साथ ही उन तत्वों की स्थिति को परिभाषित करने के लिए मैट्रिक्स प्रतिनिधित्व का उपयोग कर सकते हैं।

उदाहरण के लिए, 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 इंस्टैंस पर कॉल की गई विधि का उपयोग आपके एप्लिकेशन के लिए एक विशेष थीम सेट करने के लिए किया जाता है।

उदाहरण के लिए, कोड की निम्न पंक्ति जोड़ने से आपके एप्लिकेशन की थीम डिफ़ॉल्ट से फ़्यूज़न में बदल जाएगी

app.setStyle("Fusion")

फ्यूज़न थीम में पिछला उदाहरण इस तरह दिखेगा

विषय-वस्तु

अपने ऐप्स को थीम देने के लिए एक और उपयोगी फ़ंक्शन 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 स्टाइल शीट का उपयोग करके आसानी से अपने ऐप के लिए उन्नत स्टाइल परिभाषित कर सकते हैं।

सारांश

  • PyQt पायथन बाइंडिंग है C++ यूआई फ्रेमवर्क, क्यूटी.
  • PyQt4 और PyQt5 रिवरबैंक कंप्यूटिंग द्वारा विकसित दो प्रमुख संस्करण हैं।
  • PyQt फ्रेमवर्क के मुख्य मॉड्यूल हैं:
    1. Qt
    2. क्यूटीकोर
    3. Qtविजेट्स
    4. क्यूटीगुई
    5. क्यूटीएसक्यूएल
    6. क्यूटीनेटवर्क
  • PyQt विभिन्न विजेट्स का समर्थन करता है जैसे:
    1. बटन
    2. पाठ लेबल
    3. पाठ फ़ील्ड
    4. रेडियो बटन और चेकबॉक्स
    5. टूलबार और मेनू बार
    6. वेबकिट
    7. टैब्स
    8. डॉक्स
  • PyQt में, अन्तरक्रियाशीलता का क्रियान्वयन किया जाता है संकेत और स्लॉट्स।
  • An घटना GUI में उपयोगकर्ता द्वारा की गई क्रिया (जैसे किसी बटन पर क्लिक करना)।
  • A संकेत जब कोई घटना उस पर घटित होती है तो संबंधित विजेट द्वारा उठाया जाता है।
  • A स्लॉट एक फ़ंक्शन है जो सिग्नल से जुड़ा होता है और सिग्नल उठने पर निष्पादित होता है।
  • PyQt में एक मजबूत लेआउट इंजन है और यह उन्नत लेआउट डिज़ाइन और प्रबंधन का समर्थन करता है। PyQt में ये दो अक्सर इस्तेमाल की जाने वाली लेआउट योजनाएँ हैं:
    1. Box ख़ाका
    2. जाली का नक्शा
  • PyQt डिज़ाइनर आपको GUI अनुप्रयोग के लिए कस्टम थीम बनाने की अनुमति देता है और इसमें स्टाइल शीट के लिए अंतर्निहित समर्थन है।
  • qtcreator Python इसका उपयोग उपयोगकर्ता इंटरफेस के साथ-साथ स्टैंडअलोन एप्लिकेशन बनाने के लिए भी किया जा सकता है।