उदाहरणों सहित PyQt5 ट्यूटोरियल: बनाएं Python Qt के साथ जीयूआई

⚡ स्मार्ट सारांश

PyQt एक है Python क्रॉस-प्लेटफ़ॉर्म Qt विजेट टूलकिट के लिए बाइंडिंग, जो डेवलपर्स को नेटिव डेस्कटॉप GUI बनाने की सुविधा देता है। यह छह सौ से अधिक विजेट्स को कवर करता है। C++ विंडोज़, बटन, लेआउट, सिग्नल, स्लॉट और थीम को कवर करने वाली कक्षाएं Windows, macOSऔर लिनक्स।

  • 🔘 PyQt क्या है: A Python क्यूटी के लिए बंधन C++ यह फ्रेमवर्क रिवरबैंक कंप्यूटिंग द्वारा अनुरक्षित किया जाता है।
  • संस्करण: PyQt4, Qt 4.x और 5.x को बाइंड करता है; PyQt5 केवल Qt 5.x श्रृंखला को लक्षित करता है।
  • स्थापना: pip पैकेज मैनेजर एक ही कमांड से व्हील से PyQt5 इंस्टॉल कर देता है।
  • 🧪 पहला ऐप: QApplication और QWidget स्क्रीन पर एक बुनियादी विंडो बनाते और प्रदर्शित करते हैं।
  • Signalस्लॉट और स्लॉट: विजेट इवेंट ऐसे सिग्नल उत्पन्न करते हैं जो इससे जुड़ते हैं Python स्लॉट फ़ंक्शन।
  • 🤖 एआई के लिए तैयार: PyQt डेस्कटॉप फ्रंट-एंड बनाता है जो मशीन लर्निंग मॉडल को चलाते और प्रदर्शित करते हैं।

PyQt5 ट्यूटोरियल

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

PyQt क्या है?

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

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

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

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

PyQt में छह सौ से अधिक क्लास शामिल हैं जो कई तरह की विशेषताओं को कवर करती हैं, जैसे कि:

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

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

PyQt संस्करण

PyQt दो संस्करणों में उपलब्ध है: PyQt4 और PyQt5। PyQt4, Qt फ्रेमवर्क के 4.x और 5.x संस्करणों को जोड़ने के लिए ग्लू कोड प्रदान करता है, जबकि PyQt5 केवल 5.x संस्करणों के लिए ही बाइंडिंग प्रदान करता है। परिणामस्वरूप, PyQt5 पुराने संस्करण के अप्रचलित मॉड्यूल के साथ बैकवर्ड कम्पैटिबल नहीं है। इस PyQt GUI ट्यूटोरियल में, उदाहरणों के प्रदर्शन के लिए PyQt5 का उपयोग किया जाएगा। इन दो संस्करणों के अलावा, Riverbank Computing PyQt3D भी प्रदान करता है। Python Qt3D फ्रेमवर्क के लिए बाइंडिंग। Qt3D एक एप्लिकेशन फ्रेमवर्क है जिसका उपयोग 2D/3D रेंडरिंग के साथ रीयल-टाइम सिमुलेशन सिस्टम बनाने के लिए किया जाता है।

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

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

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

Qt (उच्चारण क्यूट) एक जटिल प्रणाली है, और PyQt कोडबेस में संकलित जानकारी शामिल है C++ और Python इसके अंदरूनी कोड में काफी बदलाव किए गए हैं। नतीजतन, अन्य सॉफ्टवेयरों की तुलना में इसे सोर्स कोड से बिल्ड और इंस्टॉल करना एक जटिल प्रक्रिया है। 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 इस संस्करण के लिए बाइनरी Python आपके कंप्यूटर पर स्थापित।

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

बेसिक PyQt Concepts और कार्यक्रम

अब जब आपने अपने कंप्यूटर पर PyQt5 को सफलतापूर्वक स्थापित कर लिया है, तो आप कोड लिखने के लिए तैयार हैं। Python जीयूआई अनुप्रयोग।

आइए इस PyQt5 ट्यूटोरियल में एक सरल ऐप से शुरुआत करें जो आपकी स्क्रीन पर एक खाली विंडो प्रदर्शित करेगा।

अपनी आग लगाओ Python 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 उदाहरण में, आपने QApplication को कोई आर्गुमेंट पास नहीं किया है। इसलिए, आप इसे नीचे दिए गए कोड से बदल सकते हैं और sys मॉड्यूल को इम्पोर्ट करने की भी आवश्यकता नहीं होगी।

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

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

w.resize(300,300)

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

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

w.setWindowTitle("Guru99")

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

w.show()

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

sys.exit(app.exec_())

app.exec_() विधि Qt/ को प्रारंभ करती हैC++ इवेंट लूप। जैसा कि आप जानते हैं, PyQt को बड़े पैमाने पर लिखा गया है C++ और यह समानांतर निष्पादन को लागू करने के लिए इवेंट लूप तंत्र का उपयोग करता है। app.exec_() नियंत्रण को Qt को सौंप देता है, जो एप्लिकेशन को तभी बंद करेगा जब उपयोगकर्ता इसे GUI से बंद करेगा। यही कारण है कि Ctrl+C अन्य एप्लिकेशन की तरह एप्लिकेशन को बंद नहीं करेगा। Python प्रोग्राम। चूंकि Qt का ऐप पर नियंत्रण है, Python जब तक हम एप्लिकेशन के अंदर इवेंट्स को सेट अप नहीं करते, तब तक वे प्रोसेस नहीं होते। साथ ही, ध्यान दें कि exec मेथड के नाम में एक अंडरस्कोर है; ऐसा इसलिए है क्योंकि exec() पहले से ही एक कीवर्ड था। Python और अंडरस्कोर नामकरण संबंधी विवाद को हल करता है।

खाली खिड़कियों से परे

पिछले भाग में, आपने देखा कि 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. अब आप अतिरिक्त पाठ की दृश्यता को बदलने के लिए विवरण छिपाएं/विवरण दिखाएं बटन पर क्लिक कर सकते हैं।

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

अब जबकि यह काम कर रहा है, आइए उस अतिरिक्त कोड पर एक नज़र डालते हैं जिसे आपने पिछले 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 विजेट एक संदेश भेजता है संकेतइन संकेतों को निम्न से जोड़ा जा सकता है Python कार्यों (इस उदाहरण में डायलॉग फ़ंक्शन की तरह) ताकि सिग्नल ट्रिगर होने पर फ़ंक्शन निष्पादित हो। इन फ़ंक्शन को कहा जाता है स्लॉट्स क्यूटी लिंगो में.

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

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

अक्सर पूछे जाने वाले प्रश्न

Tkinter के साथ निम्नलिखित सुविधाएं उपलब्ध हैं: Python और यह छोटे, सरल उपकरणों के लिए उपयुक्त है। PyQt में कहीं अधिक विजेट, एक विज़ुअल डिज़ाइनर और एक नेटिव लुक है, जो इसे बड़े, पेशेवर डेस्कटॉप अनुप्रयोगों के लिए बेहतर बनाता है - हालांकि इसके लिए सीखने में अधिक समय लगता है और इसमें GPL लाइसेंसिंग की आवश्यकता होती है।

दोनों एक ही Qt लाइब्रेरी का उपयोग करते हैं और लगभग समान API साझा करते हैं। मुख्य अंतर लाइसेंसिंग का है: PyQt GPL या सशुल्क वाणिज्यिक लाइसेंस का उपयोग करता है, जबकि PySide (Qt for Python) एलजीपीएल का उपयोग करता है, जो क्लोज्ड-सोर्स वितरण को मुफ्त में उपलब्ध कराता है।

Qt डिज़ाइनर एक ड्रैग-एंड-ड्रॉप टूल है जो आपके लेआउट को XML .ui फ़ाइल के रूप में सहेजता है। इसे परिवर्तित करें Python pyuic5 यूटिलिटी के साथ, या uic.loadUi() का उपयोग करके इसे रनटाइम पर लोड करें।

PyQt6 नए Qt 6 फ्रेमवर्क को जोड़ता है और इसके लिए पूरी तरह से स्कोप्ड एनम की आवश्यकता होती है, जैसे कि Qt.AlignmentFlag.AlignLeft। PyQt5, Qt 5 को लक्षित करता है और सबसे व्यापक रूप से उपयोग किया जाने वाला संस्करण बना हुआ है। PyQt6 कुछ अप्रचलित मॉड्यूल को भी हटाता है और बेहतर हाई-डीपीआई समर्थन जोड़ता है।

PyInstaller का उपयोग करें: अपनी स्क्रिप्ट, PyQt5 और Qt लाइब्रेरी को एक ही एक्जीक्यूटेबल में बंडल करने के लिए pyinstaller –onefile –windowed app.py कमांड चलाएँ। –windowed फ्लैग कंसोल को छुपा देता है। fbs और cx_Freeze लोकप्रिय विकल्प हैं।

यदि आपको बुनियादी जानकारी है तो PyQt5 शुरुआती लोगों के लिए अनुकूल है। Pythonक्लास, ऑब्जेक्ट और सिग्नल-एंड-स्लॉट पैटर्न को समझना सबसे ज़्यादा मददगार होता है। Qt डिज़ाइनर आपको लेआउट को विज़ुअली बनाने की सुविधा देता है, जिससे आप हर विजेट को मैन्युअल रूप से समझने से पहले ही काम करने वाली विंडो बना सकते हैं।

PyQt मशीन लर्निंग मॉडल के लिए डेस्कटॉप फ्रंट-एंड बनाता है — ऐसे डैशबोर्ड जो डेटा लोड करते हैं, ट्रेनिंग या इन्फरेंस शुरू करते हैं, और भविष्यवाणियां, चार्ट या इमेज प्रदर्शित करते हैं। यह NumPy, pandas और Matplotlib के साथ अच्छी तरह से काम करता है।ping एक प्रशिक्षित मॉडल को उपयोगकर्ता के अनुकूल यूजर इंटरफेस में प्रस्तुत किया गया है।

जी हां। GitHub Copilot, PyQt5 के सामान्य पैटर्न जैसे QApplication सेटअप, विजेट निर्माण और सिग्नल-स्लॉट कनेक्शन को किसी टिप्पणी या फ़ंक्शन नाम से स्वतः पूर्ण कर देता है। लेआउट और इवेंट हैंडलर सही ढंग से काम कर रहे हैं या नहीं, यह सुनिश्चित करने के लिए हमेशा जेनरेट की गई विंडो को चलाएं।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: