मैक ऐप स्टोर पर TODO, एक साधारण TODO ऐप बनाने के लिए PYQT5 मॉडलव्यू आर्किटेक्चर का उपयोग करना
ModelView आर्किटेक्चर QT S MVC- जैसे इंटरफ़ेस को दृश्य में डेटा प्रदर्शित करने के लिए
Contents
- 1 ModelView आर्किटेक्चर QT S MVC- जैसे इंटरफ़ेस को दृश्य में डेटा प्रदर्शित करने के लिए
रनिंग ऐप नीचे दिखाया गया है.
टोडो 4+
कई वर्षों तक मैंने अपने iPad, अपने iPhone और अपने MacbookPro पर इस एप्लिकेशन का उपयोग किया. यदि यह iOS पर पूरी तरह से काम करना जारी रखता है, तो ऐसा लगता है कि इसने MacOS के विकास का पूरी तरह से पालन नहीं किया है.
इसे स्थापित करने में कोई समस्या नहीं है. लेकिन अब MacOS पर टोडेल्डो के साथ सिंक्रनाइज़ करना संभव नहीं है, जबकि यह iOS पर संभव है: एक ही पहचानकर्ता को मान्यता प्राप्त नहीं है.
इसलिए यह मेरे लिए अनावश्यक हो जाता है … और Appigo की सहायता मेरे अनुरोध का जवाब देने की जल्दी में नहीं लगती है. यह ध्यान रखना हमेशा अप्रिय होता है कि ग्राहक की अवधारणा हर दिन अपने मूल्य का थोड़ा और अधिक खो देती है.
पिसा डी
इस अपडेट के बाद से मैंने 12 की संख्या में अपनी सभी सूची खो दी है और जिसके साथ मैं रोजाना पेशेवर तरीके से काम करता हूं. मैं लगभग 200 स्पॉट को स्थायी रूप से प्रबंधित करता हूं, इस अपडेट ने जमीन के महीनों के आधार पर रखा है ! सूची में आयोजित सभी कार्यों ने खुद को एकल वैश्विक सूची में वर्गीकृत किया. यह निश्चित रूप से यह बग नहीं है जो मुझे इस सॉफ़्टवेयर के पेशेवर के रूप में कहते हुए संस्करण को पास कर देगा अन्यथा उत्कृष्ट. मैं कभी बंदी नहीं रहूंगा. यह केवल मेरे लिए ईमेल द्वारा इस शाम से संपर्क किए गए समर्थन की प्रतिक्रिया के लिए इंतजार करने के लिए बना हुआ है या फिर इस शानदार सॉफ्टवेयर के पुराने संस्करण को खोजें. मैं वास्तव में आशा करता हूं कि यह नए संस्करण का एक युवा बीग है और पिछले संस्करण के साथ पहले से प्राप्त कार्यात्मकताओं को खोजने के लिए पेड प्रो संस्करण में माइग्रेट करने के लिए मजबूर करने की रणनीति नहीं है. जानकारी के लिए मेरा सिंक ड्रॉपबॉक्स के साथ किया जाता है
Surlepoint, 12/13/2011
सिंक्रो अब निकल है
मैंने सिंक्रनाइज़ेशन से पहले पकड़ लिया जो धीमा था, बुरी तरह से चला गया, आदि।. लेकिन अब iCloud के साथ, यह मुझे पूरी तरह से सूट करता है.
कुछ संभावित सुधार: अधिक प्रदर्शन सेटिंग्स.
– केवल वही प्रदर्शित करने के लिए जो उपयोगकर्ता उपयोग करता है. उदाहरण के लिए, मैं संदर्भों या लेबल का उपयोग नहीं करता (किसी भी मामले में अभी तक नहीं) और मैं अब इन विकल्पों को प्रदर्शित नहीं करना चाहूंगा जो मेरे टोडो “प्रदूषित” हैं. मैं अपने रोजमर्रा के नोटों के लिए केवल “दिनांक / प्राथमिकता / सूची / प्रकार” करना चाहूंगा और उन विकल्पों के लिए राइट क्लिक करें जो मैं शायद ही कभी उपयोग करता हूं
– और इसके विपरीत, मैं दिनांक, प्राथमिकता, सूची, … को चुनने के लिए एक ड्रॉप -डाउन मेनू की तुलना में एक साधारण PLSU डिस्प्ले चाहता हूं, … यदि मेरे पास केवल तीन सूचियाँ हैं, तो तीन बटन प्रदर्शित करने के लिए पर्याप्त होंगे, और मैं अपनी सूची चुन सकता हूं ड्रॉप -डाउन मेनू पर क्लिक करने के बजाय एक क्लिक के साथ, नाम खोजें, और उस पर क्लिक करें. (प्राथमिकता के लिए डिट्टो, विशेष रूप से कि हम टोडो सूची में एक बहुत ही दृश्य ड्राइंग से जाते हैं, विकल्पों में नाम की पसंद के लिए जो बहुत स्वाभाविक नहीं है.
ये एर्गोनॉमिक्स विवरण हैं. मुझे सादगी और TODO की दक्षता पसंद है, इसलिए मैं चाहूंगा कि यह और भी अधिक विन्यास करने योग्य हो सकता है और भी सरल हो सकता है.
गोपनीयता ऐप
डेवलपर, Appigo, ने अपनी निजी प्रथाओं और Apple को डेटा को संभालने के बारे में विवरण प्रदान नहीं किया है. अधिक जानकारी के लिए, विकास की गोपनीयता नीति देखें.
मॉडलव्यू आर्किटेक्चर
QT का MVC जैसा इंटरफ़ेस दृश्य में डेटा प्रदर्शित करने के लिए
जैसा कि आप pyqt5 के साथ अधिक जटिल अनुप्रयोगों का निर्माण करना शुरू करते हैं, आप संभवतः अपने डेटा के साथ विगेट्स को सिंक में रखने के लिए आएंगे. विजेट में संग्रहीत डेटा (ई).जी. एक साधारण QListWidget) पायथन से हेरफेर करने के लिए आसानी से उपलब्ध नहीं है – परिवर्तन आपको एक आइटम प्राप्त करने, डेटा प्राप्त करने और फिर इसे वापस सेट करने की आवश्यकता है. इसका डिफ़ॉल्ट समाधान पायथन में एक बाहरी डेटा प्रतिनिधित्व रखना है, और फिर ईथ डेटा और विजेट दोनों को अपडेट करता है, या बस डेटा से विहोल विजेट को फिर से लिखना. यह जल्दी से बदसूरत हो सकता है, और डेटा को फिड करने के लिए बहुत सारे बॉयलरप्लेट में परिणाम हो सकता है.
शुक्र है कि क्यूटी के पास इसके लिए एक समाधान है – ModelViews. ModelViews मानक डिस्प्ले विजेट के लिए एक शक्तिशाली विकल्प है, जो डेटा स्रोतों के साथ बातचीत करने के लिए एक नियमित मॉडल इंटरफ़ेस का उपयोग करते हैं – सरल डेटा संरचनाओं से बाहरी डेटाबेस तक. यह आपके डेटा को अलग करता है, जिससे इसे किसी भी संरचना में रखा जा सकता है, जबकि दृश्य प्रस्तुति और अपडेट का ध्यान रखता है.
यह ट्यूटोरियल क्यूटी के मॉडलव्यू आर्किटेक्चर के प्रमुख पहलुओं का परिचय देता है और इसका उपयोग pyqt5 में सरल डेस्कटॉप TODO अनुप्रयोग बनाने के लिए करता है.
मॉडल दृश्य नियंत्रक
मॉडल – देखें – नियंत्रक (एमवीसी) विकास उपयोगकर्ता इंटरफेस के लिए एक वास्तुशिल्प पैटर्न का उपयोग है जो एक एप्लिकेशन को तीन परस्पर जुड़े भागों में हटा देता है. यह डेटा के आंतरिक प्रतिनिधित्व को अलग करता है कि कैसे जानकारी प्रस्तुत की जाती है और उपयोगकर्ता से स्वीकार किया जाता है.
MVC डिज़ाइन Pattenn Fets तीन प्रमुख घटक –
- नमूना डेटा संरचना रखती है जिसके साथ ऐप काम कर रहा है.
- देखना जानकारी का कोई प्रतिनिधित्व है जैसा कि उपयोगकर्ता को दिखाया गया है, जहां ग्राफिकल या टेबल. एक ही डेटा मॉडल के कई विचारों की अनुमति है.
- नियंत्रण उपयोगकर्ता से इनपुट स्वीकार करता है, इसे मॉडल या दृश्य के लिए कमांड में बदल देता है.
यह qt दृश्य और नियंत्रक के बीच का अंतर थोड़ा कम हो जाता है. क्यूटी उपयोगकर्ता से (ओएस के माध्यम से) इनपुट ईवेंट को स्वीकार करता है और इन्हें संभालने के लिए विजेट (नियंत्रक) को सौंपता है. हालांकि, विजेट्स भी उपयोगकर्ता को वर्तमान स्थिति की प्रस्तुति को संभालते हैं, उन्हें दृश्य में चौकोर रूप से डालते हैं. क्यूटी-एस-स्पेक में जहां लाइन खींचने के लिए, जहां दृश्य और नियंत्रक हैं, इलड मर्ज किए गए टॉगड को एक मॉडल/ViewController आर्किटेक्चर-कॉल्ड “मॉडल व्यू” में सादगी के लिए खातिर करें।.
महत्वपूर्ण रूप से, के बीच का अंतर डेटा और यह कैसे प्रस्तुत किया जाता है संरक्षित है.
मॉडल दृश्य
मॉडल डेटा स्टोर और ViewController के बीच इंटरफ़ेस के रूप में कार्य करता है. मॉडल डेटा (या इसका एक संदर्भ) रखता है और इस डेटा को एक मानकीकृत एपीआई के माध्यम से प्रस्तुत करता है जो तब देखता है और उपयोगकर्ता को उपभोग करता है और प्रस्तुत करता है. कई दृश्य एक ही डेटा साझा कर सकते हैं, इसे पूरी तरह से अलग तरीकों से प्रस्तुत कर सकते हैं.
आप अपने मॉडल के लिए किसी भी “डेटा स्टोर” का उपयोग कर सकते हैं, उदाहरण के लिए एक मानक पायथन सूची या शब्दकोश, या एक डेटाबेस (ई के माध्यम से).जी. Sqlalchemy) – यह आप पर निर्भर है.
दो भाग अनिवार्य रूप से जिम्मेदार हैं –
- चाय नमूना डेटा, या इसके संदर्भ को संग्रहीत करता है और व्यक्तिगत या रिकॉर्ड के रेंज लौटाता है, और संबंधित मेटाडेटा या प्रदर्शन निर्देश.
- चाय देखना मॉडल से डेटा का अनुरोध करता है और प्रदर्शित करता है कि विजेट पर क्या लौटा है.
प्रलेखन में क्यूटी वास्तुकला की गहन चर्चा है.
Pyinstaller के साथ पायथन GUI अनुप्रयोगों को पैकेजिंग करने के लिए पूरा गाइड.
[[छूट.Discion_pc]]] अगले [छूट के लिए% बंद.अवधि]] [छूट.विवरण]] कोड के साथ [छूट.कूपन कोड]]
क्रय शक्ति समता
[[देश]] में डेवलपर्स [[छूट.discion_pc]]] कोड के साथ सभी पुस्तकों और पाठ्यक्रमों पर बंद [छूट.कूपन कोड]]
एक साधारण मॉडल दृश्य – एक TODO सूची
व्यवहार में मॉडलव्यू का उपयोग करने का तरीका प्रदर्शित करने के लिए, हम एक डेस्कटॉप टोडो सूची का एक बहुत ही सरल कार्यान्वयन एक साथ रखेंगे. इसमें आइटमों की सूची के लिए एक QlistView शामिल होगा, नई वस्तुओं को दर्ज करने के लिए एक QlineEdit, और जैसा कि किया गया, हटाने, हटाने या चिह्नित करने के लिए बटन का एक सेट.
यूआई
साधारण यूआई बदसूरत से बाहर क्यूटी निर्माता था और मेनविन्डो के रूप में बचाया गया था.यूआई . चाय .UI फ़ाइल और अन्य सभी भागों को नीचे डाउनलोड किया जा सकता है.
क्यूटी निर्माता में एक साधारण टोडो ऐप डिजाइन करना
रनिंग ऐप नीचे दिखाया गया है.
रनिंग TODO GUI (अभी तक कुछ भी काम नहीं करता है)
इंटरफ़ेस में उपलब्ध विजेट हमने नीचे दी गई तालिका में दिखाए गए आईडी को दिया.
ओबजुच | दयालु | विवरण |
---|---|---|
टोडव्यू | Qlistview | वर्तमान टोडोस की सूची |
टोडोडिट | Qlineedit | एक नया TODO आइटम बनाने के लिए पाठ इनपुट |
AddButton | Qpushbutton | नए TODO बनाएँ, इसे टोडोस सूची में जोड़ते हुए |
डिलीटबटन | Qpushbutton | वर्तमान चयनित TODO को हटाएं, इसे टोडोस सूची से हटा दें |
पूरा | Qpushbutton | जैसा कि किया गया वर्तमान चयनित TODO को चिह्नित करें |
हम बाद में एप्लिकेशन लॉजिक को हुक करने के लिए इन पहचानकर्ताओं का उपयोग करेंगे.
आदर्श
हम अपने कस्टम मॉडल को कार्यान्वयन से उप -विभाजन करके परिभाषित करते हैं, जिससे हमें अपने मॉडल के लिए अद्वितीय भागों पर ध्यान केंद्रित करने की अनुमति मिलती है. क्यूटी कई अलग -अलग मॉडल ठिकानों की संख्या को शामिल करता है, जिसमें सूचियाँ, पेड़ और टेबल (स्प्रेडशीट के लिए आदर्श) शामिल हैं.
इस उदाहरण के लिए हम एक QListView के परिणाम को प्रदर्शित कर रहे हैं . इसके लिए मिलान आधार मॉडल QabstractlistModel है . हमारे मॉडल के लिए रूपरेखा की परिभाषा नीचे दिखाई गई है.
क्लास टोडोमोडेल.Qabstractlistmodel): def __init __ (स्व, *args, todos = कोई नहीं, ** kwargs): सुपर (टोडोमोडेल, स्व).__init __ (*args, ** kwargs) स्व.TODOS = TODOS या [] DEF डेटा (स्व, सूचकांक, भूमिका): यदि भूमिका == qt.DisplayRole: # डेटा संरचना के लिए नीचे देखें. स्थिति, पाठ = स्व.टोडोस [सूचकांक.पंक्ति ()] # केवल TODO पाठ लौटाएं. रिटर्न टेक्स्ट डिफ रोवकाउंट (सेल्फ, इंडेक्स): रिटर्न लेन (सेल्फ (सेल्फ).टोडोस)
चाय .टोडोस वैरिएबल हमारा डेटा स्टोर है और दो तरीके RowCount () और डेटा () मानक मॉडल तरीके हैं जो हमें एक सूची मॉडल के लिए चाहिए. हम नीचे बारी -बारी से इन के माध्यम से जाएंगे.
.टोडोस सूची
हमारे मॉडल के लिए डेटा स्टोर है .टोडोस, एक साधारण पायथन सूची जिसमें हम प्रारूप में मानों का एक टपल संग्रहीत करेंगे [(बूल, स्ट्रिंग), (बूल, स्ट्रिंग), (बूल, स्ट्रिंग)] जहां बूल है इसलिए किसी दिए गए प्रविष्टि की स्थिति, और एसटीओडीओ का पाठ है.
हम स्वयं को शुरू करते हैं.स्टार्टअप पर एक खाली सूची के लिए टोडो, जब तक कि एक सूची टोडोस कीवर्ड तर्क के माध्यम से पास नहीं होती है.
खुद.टोडोस = टोडोस या [] स्वयं को सेट करेगा.यदि यह है तो टोडोस मूल्य के लिए टोडोस तंग करना (मैं.इ. एक खाली सूची के अलावा कुछ भी, बूलियन गलत या कोई भी डिफ़ॉल्ट मान नहीं), अन्यथा यह खाली सूची में सेट किया जाएगा [] .
इस मॉडल की एक इनसेंस बनाने के लिए हम सरल कर सकते हैं –
मॉडल = todomodel () # एक खाली TODO सूची बनाएं
या किसी मौजूदा सूची में पास करने के लिए –
टोडोस = [(गलत, 'एक आइटम'), (गलत, 'एक और आइटम')] मॉडल = टोडोमोडेल (टोडोस)
.पंक्ति गिनती ()
चाय .वर्तमान डेटा में पंक्तियों की संख्या प्राप्त करने के लिए rowCount () विधि को देखने के द्वारा Callade है. यह देखने के लिए आवश्यक है कि अब अधिकतम सूचकांक यह डेटा स्टोर (पंक्ति गणना -1) को फिर से कर सकता है. बिक्री हम अपने डेटा स्टोर के रूप में एक पायथन सूची का उपयोग कर रहे हैं, इसके लिए वापसी मान सूची का केवल लेन () है.
.डेटा ()
यह आपके मॉडल का मूल है, जो दृश्य से डेटा के लिए अनुरोधों को संभालता है और उचित परिणाम लौटा देता है. यह दो पैरामीटर सूचकांक और भूमिका प्राप्त करता है.
सूचकांक डेटा की स्थिति/निर्देशांक है जो दृश्य अनुरोध कर रहा है, दो तरीकों से सुलभ है .पंक्ति () और .स्तंभ () जो प्रत्येक आयाम में स्थिति देता है.
हमारे QlistView के लिए कॉलम हमेशा 0 है और इसे अनदेखा किया जा सकता है, लेकिन आपको स्प्रेडशीट दृश्य में 2 डी डेटा के लिए इसका उपयोग करने की आवश्यकता होगी.
भूमिका एक ध्वज है जो दर्शाता है दयालु डेटा का अनुरोध अनुरोध कर रहा है. ऐसा इसलिए है क्योंकि .डेटा () विधि वास्तव में केवल कोर डेटा की तुलना में अधिक जिम्मेदारी है. यह स्टाइल जानकारी, टूलटिप्स, स्टेटस बार, आदि के लिए अनुरोधों को भी संभालता है।. – मूल रूप से कुछ भी जिसे डेटा द्वारा ही सूचित किया जा सकता है.
क्यूटी का नामकरण.DisplayRole थोड़ा अजीब है, लेकिन यह इंगित करता है कि देखना हमसे पूछ रहा है “कृपया मुझे प्रदर्शन के लिए डेटा दें”. वहाँ अन्य हैं भूमिका स्टाइलिंग अनुरोधों या “एडिट-रेडी” प्रारूप में डेटा का अनुरोध करने के लिए डेटा प्राप्त कर सकते हैं.
भूमिका | कीमत | विवरण |
---|---|---|
क्यूटी.प्रदर्शन | 0 | पाठ के रूप में प्रतिपादन किया जाने वाला प्रमुख डेटा. (Qstring) |
क्यूटी.सजावट | 1 | डेटा को एक आइकन के रूप में एक सजावट के रूप में प्रस्तुत किया जाना है. (Qcolor, Qicon या QPixMap) |
क्यूटी.संपादकीय | 2 | एक संपादक में संपादन के लिए एक औपचारिक अनुसरण में डेटा. (Qstring) |
क्यूटी.टूलटिप्रोल | 3 | आइटम के टूलटिप में प्रदर्शित डेटा. (Qstring) |
क्यूटी.कसना | 4 | स्टेटस बार में प्रदर्शित डेटा. (Qstring) |
क्यूटी.Whatsthisrole | 5 | “क्या है” में आइटम के लिए प्रदर्शित डेटा?” पहनावा. (Qstring) |
क्यूटी.Sizehintrole | 13 | आइटम के लिए आकार का संकेत जो दृश्य के लिए आपूर्ति की जाएगी. (Qsize) |
उपलब्ध की पूरी सूची के लिए भूमिका कि आप qt itmdatarole प्रलेखन देख सकते हैं. हमारी TODO सूची केवल QT का उपयोग करेगी.डिस्प्लेरोल और क्यूटी.सजावट .
मूल कार्यान्वयन
नीचे UI को लोड करने और इसे प्रदर्शित करने के लिए आवश्यक मूल स्टब एप्लिकेशन है. हम इस आधार में अपना मॉडल कोड और एप्लिकेशन लॉजिक जोड़ेंगे.
Pyqt5 से आयात sys आयात qtcore, qtgui, qtwidgets, pyqt5 से uic.Qtcore आयात qt_creator_file = "mainwindow.ui "ui_mainwindow, qtbaseclass = uic.Loaduduype (qt_creator_file) वर्ग todomodel (qtcore (qtcore.Qabstractlistmodel): def __init __ (स्व, *args, todos = कोई नहीं, ** kwargs): सुपर (टोडोमोडेल, स्व).__init __ (*args, ** kwargs) स्व.TODOS = TODOS या [] DEF डेटा (स्व, सूचकांक, भूमिका): यदि भूमिका == qt.प्रदर्शन: स्थिति, पाठ = स्व.टोडोस [सूचकांक.पंक्ति ()] रिटर्न टेक्स्ट डेफ रोवकाउंट (सेल्फ, इंडेक्स): रिटर्न लेन (सेल्फ (स्व.टोडोस) क्लास मेनविंडो (qtWidgets).QMainWindow, UI_MainWindow): def __init __ (स्व): qtwidgets.Qumainwindow.__init __ (स्व) ui_mainwindow.__init __ (स्व) स्व.Setupui (स्व) स्व.मॉडल = todomodel () स्व.टोडव्यू.SetModel (स्व).मॉडल) app = qtwidgets.QApplication (sys).Argv) विंडो = mainwindow () विंडो.शो () ऐप.Exec_ ()
हम पहले की तरह अपने टोडोमॉडल को परिभाषित करते हैं, और मेनविन्डो ऑब्जेक्ट को इनिशियलाइज़ करते हैं. MainWindow के लिए __init__ में हम अपने TODO मॉडल का एक उदाहरण बनाते हैं और TODO_VIEW पर इस मॉडल को सेट करते हैं . इस फ़ाइल को TODO के रूप में सहेजें.Py और इसे चलाओ –
पायथन 3 टोडो.गति
जबकि अभी तक देखने के लिए बहुत कुछ नहीं है, QlistView और हमारा मॉडल वास्तव में काम कर रहे हैं – यदि आप कुछ डिफ़ॉल्ट डेटा जोड़ते हैं तो आप इसे सूची में दिखाई देंगे.
खुद.मॉडल = टोडोमोडेल (टोडोस = [(गलत, 'मेरा पहला टोडो')])))))))
QlistView हार्ड-कोडेड TODO आइटम दिखा रहा है
आप इस तरह से मैन्युअल रूप से आइटम जोड़ सकते हैं और वे QlistView में क्रम में दिखाई देंगे . आगे हम आवेदन के भीतर से आईटीएम जोड़ना संभव बना देंगे.
पहले Add नाम के MainWindow पर एक नई विधि बनाएं . यह हमारा कॉलबैक है जो एक नए टोडो के रूप में इनपुट से वर्तमान पाठ को जोड़ने का ध्यान रखेगा. इस विधि को AddButton से कनेक्ट करें.__Init__ ब्लॉक के अंत में दबा हुआ संकेत.
क्लास मेनविंडो (qtWidgets).QMainWindow, UI_MainWindow): def __init __ (स्व): qtwidgets.Qumainwindow.__init __ (स्व) ui_mainwindow.__init __ (स्व) स्व.Setupui (स्व) स्व.मॉडल = todomodel () स्व.टोडव्यू.SetModel (स्व).मॉडल) # बटन कनेक्ट करें. खुद.AddButton.प्रेस.कनेक्ट (स्व).जोड़ें) def जोड़ें (स्व): "" हमारी TODO सूची में एक आइटम जोड़ें, QlineEdit से पाठ प्राप्त करना .Todoedit और वहाँ इसे साफ करना. "" "पाठ = स्व.टोडोडिट.पाठ () यदि पाठ: # खाली तार न जोड़ें. # मॉडल के माध्यम से सूची का उपयोग करें. खुद.नमूना.सब.परिशिष्ट (गलत, पाठ)) # ट्रिगर रिफ्रेश. खुद.नमूना.लेआउटचेंज किया हुआ.EMIT () # इनपुट स्वयं को खाली करें.टोडोडिट.सेटटेक्स्ट ("")
ADD ब्लॉक में लाइन स्वयं को नोटिस करें.नमूना.लेआउटचेंज किया हुआ.Emit () . यहां हम एक मॉडल सिग्नल का उत्सर्जन करते हैं .लेआउटचेंज को देखने के लिए यह बताने के लिए कि आकार डेटा को बदल दिया गया है. यह दृश्य की इकाई के एक ताज़ा को ट्रिगर करता है. यदि आप इस लाइन को छोड़ देते हैं, तो TODO अभी भी जोड़ा जाएगा, लेकिन QlistView अपडेट नहीं होगा.
यदि सिर्फ डेटा बदल दिया जाता है, लेकिन पंक्तियों/कॉलम की संख्या अप्रभावित है तो आप उपयोग कर सकते हैं .इसके बजाय datachanged () सिग्नल. यह पूरे दृश्य को फिर से देखने से बचने के लिए एक शीर्ष-बाएं और नीचे-दाएं किराये का उपयोग करके डेटा में एक परिवर्तित क्षेत्र को भी परिभाषित करता है.
अन्य कार्यों को हुक करना
अब हम बटन के बाकी संकेतों को कनेक्ट कर सकते हैं और प्रदर्शन के लिए हेल्पिंग जोड़ सकते हैं मिटाना और पूरा संचालन. हम पहले की तरह __init__ ब्लॉक में बटन सिग्नल जोड़ते हैं.
खुद.AddButton.प्रेस.कनेक्ट (स्व).जोड़ें) स्व.डिलीटबटन.प्रेस.कनेक्ट (स्व).हटाएं) स्व.पूरा.प्रेस.कनेक्ट (स्व).पूरा)
फिर एक नई डिलीट विधि को निम्नानुसार परिभाषित करें –
Def डिलीट (स्व): अनुक्रमित = स्व.टोडव्यू.SelectedDindexes () यदि अनुक्रमित: # इंडेक्स एकल-चयन में एकल आइटम की एक सूची है. इंडेक्स = इंडेक्स [0] # आइटम निकालें और रिफ्रेश करें. डेल स्व.नमूना.टोडोस [सूचकांक.पंक्ति ()] स्व.नमूना.लेआउटचेंज किया हुआ.EMIT () # चयन को साफ़ करें (क्योंकि यह कोई लंबी मान्य नहीं है). खुद.टोडव्यू.क्लेरेलेक्शन ()
हम स्वयं का उपयोग करते हैं.टोडव्यू.Indexes प्राप्त करने के लिए CelectedDindexes (वास्तव में एकल आइटम की एक सूची, जैसा कि हम एकल-चयन मोड में हैं) और फिर .हमारे मॉडल पर टोडोस की हमारी सूची में एक सूचकांक के रूप में पंक्ति (). हम पायथन के डेल ऑपरेटर का उपयोग करके अनुक्रमित आइटम को हटा देते हैं, और फिर एक लेआउटचेंज सिग्नल को ट्रिगर करते हैं क्योंकि डेटा के आकार को संशोधित किया गया है.
परिमित, हम सक्रिय चयन को साफ करते हैं क्योंकि यह उस आइटम से संबंधित है जो अब सीमा से बाहर हो सकता है (यदि आपने अंतिम आइटम का चयन किया था).
आप इस स्मार्ट्टर को बनाने की कोशिश कर सकते हैं, और इसके बजाय सूची में अंतिम आइटम का चयन कर सकते हैं
पूरी विधि इस तरह से पसंद करती है –
डीईएफ पूर्ण (स्व): अनुक्रमित = स्व.टोडव्यू.चयन करें.पंक्ति () स्थिति, पाठ = स्व.नमूना.टोडोस [पंक्ति] स्व.नमूना.टोडोस [पंक्ति] = (सच, पाठ) # .Datachanged शीर्ष-बाएं और नीचे दाईं ओर लेता है, जो एक एकल चयन के लिए # बराबर हैं. खुद.नमूना.अचूक.EMIT (इंडेक्स, इंडेक्स) # चयन को साफ़ करें (क्योंकि यह कोई लंबी मान्य नहीं है). खुद.टोडव्यू.क्लेरेलेक्शन ()
यह हटाने के लिए उसी इंडेक्सिंग का उपयोग करता है, लेकिन इस बार हम मॉडल से आइटम लाते हैं .टोडोस सूची और फिर स्थिति को सही के साथ बदलें .
हमें इस फेच-एंड-रिप्लेसमेंट को करना होगा, क्योंकि हमारे डेटा को पायथन ट्यूपल्स के रूप में संग्रहीत किया जाता है जिसे संशोधित नहीं किया जा सकता है.
यहाँ अलग -अलग बनाम. मानक क्यूटी विजेट यह है कि हम सीधे अपने डेटा में परिवर्तन करते हैं, और सरल रूप से क्यूटी को सूचित करने की आवश्यकता है जो हासर्ड को बदलता है – विजेट स्थिति को अपडेट करना स्वचालित रूप से संभाला जाता है.
क्यूटी का उपयोग करना.सजावट
यदि आप एप्लिकेशन को चलाते हैं तो आपको यह पता लगाना चाहिए कि दोनों काम को जोड़ना और हटाना, लेकिन आइटम पूरा करने के दौरान काम कर रहा है, दृश्य में इसका कोई संकेत नहीं है. हमें एक आइटम पूरा होने पर प्रदर्शित करने के लिए एक संकेतक के साथ दृश्य प्रदान करने के लिए अपने मॉडल को अपडेट करने की आवश्यकता है. अद्यतन मॉडल नीचे दिखाया गया है.
टिक = qtgui.Qimage ('टिक.PNG ') क्लास टोडोमोडेल (qtcore).Qabstractlistmodel): def __init __ (स्व, *args, todos = कोई नहीं, ** kwargs): सुपर (टोडोमोडेल, स्व).__init __ (*args, ** kwargs) स्व.TODOS = TODOS या [] DEF डेटा (स्व, सूचकांक, भूमिका): यदि भूमिका == qt.DisplayRole: _, पाठ = स्व.टोडोस [सूचकांक.पंक्ति ()] पाठ वापस करें यदि भूमिका == क्यूटी.सजावट: स्थिति, _ = स्व.टोडोस [सूचकांक.पंक्ति ()] यदि स्थिति: वापसी टिक डिफ रोवकाउंट (स्व, सूचकांक): रिटर्न लेन (स्व (स्व).टोडोस)
एक टिक आइकन टिक का उपयोग कर रहे थे.PNG पूर्ण आइटम को इंगित करने के लिए, जिसे हम टिक नामक एक Qimage ऑब्जेक्ट में लोड करते हैं . मॉडल में हमने क्यूटी के लिए एक हैंडलर को इकट्ठा किया.डेकोरेशनरोल जो उन पंक्तियों के लिए टिक आइकन लौटाता है, जिनकी स्थिति सही है (पूर्ण के लिए).
मैं जिस आइकन का उपयोग कर रहा हूं, वह पी द्वारा सेट किए गए फ्यूग से लिया गया है.युसुकेकामियामने
एक I आइकन के intostad आप भी रंग पर लौट सकते हैं, ई.जी. Qtgui.Qcolor (‘हरा’) जिसे ठोस वर्ग के रूप में खींचा जाएगा.
ऐप चलाना आपको अब पूरी तरह से आइटम को चिह्नित करने में सक्षम होना चाहिए.
टोडोस पूरी तरह से चिह्नित है
एक दृढ़ डेटा स्टोर
हमारा TODO ऐप अच्छी तरह से काम करता है, लेकिन इसमें एक घातक दोष होता है-यह आपके टोडोस को भूल जाता है जैसे ही आप एप्लिकेशन को बंद कर देते हैं, जबकि यह सोचते हैं कि आपके पास ज़ेन की अल्पकालिक भावनाओं में योगदान करने के लिए कुछ भी नहीं करना है, लंबे समय तक यह शायद एक है बुरा विचार.
समाधान दृढ़ डेटा स्टोर के कुछ आउटिंग को लागू करना है. सबसे सरल दृष्टिकोण एक साधारण फ़ाइल स्टोर है, जहां हम स्टार्टअप में JSON या अचार फ़ाइल से आइटम लोड करते हैं, और परिवर्तन पर वापस लिखते हैं.
ऐसा करने के लिए हम अपने हाथ पर दो नए तरीकों को परिभाषित करते हैं . ये एक JSON फ़ाइल नाम डेटा से लोड डेटा.JSON (यदि यह मौजूद है, तो त्रुटि को अनदेखा करना यदि यह नहीं है).नमूना.टोडोस और वर्तमान स्वयं को लिखें.नमूना.क्रमशः एक ही फ़ाइल के लिए टोडोस.
DEF लोड (स्व): कोशिश करें: खुले के साथ ('डेटा.json ',' r ') के रूप में f: स्व.नमूना.टोडोस = JSON.लोड (एफ) अपवाद अपवाद: पास डिफ सेव (स्व): ओपन के साथ ('डेटा (' डेटा.json ',' w ') के रूप में f: data = json.डंप (स्व).नमूना.टोडोस, एफ)
डेटा में परिवर्तन को बनाए रखने के लिए हमें जोड़ने की आवश्यकता है .किसी भी विधि के अंत में सहेजें () हैंडलर जो डेटा को संशोधित करता है, और .मॉडल बनाने के बाद __init__ ब्लॉक के लिए लोड () हैंडलर.
अंतिम कोड इस तरह दिखता है –
आयात sys आयात json pyqt5 से आयात qtcore, qtgui, qtwidgets, pyqt5 से uic.Qtcore आयात qt_creator_file = "mainwindow.ui "ui_mainwindow, qtbaseclass = uic.Loadudusepeype (qt_creator_file) टिक = qtgui.Qimage ('टिक.PNG ') क्लास टोडोमोडेल (qtcore).Qabstractlistmodel): def __init __ (स्व, *args, todos = कोई नहीं, ** kwargs): सुपर (टोडोमोडेल, स्व).__init __ (*args, ** kwargs) स्व.TODOS = TODOS या [] DEF डेटा (स्व, सूचकांक, भूमिका): यदि भूमिका == qt.DisplayRole: _, पाठ = स्व.टोडोस [सूचकांक.पंक्ति ()] पाठ वापस करें यदि भूमिका == क्यूटी.सजावट: स्थिति, _ = स्व.टोडोस [सूचकांक.पंक्ति ()] यदि स्थिति: वापसी टिक डिफ रोवकाउंट (स्व, सूचकांक): रिटर्न लेन (स्व (स्व).टोडोस) क्लास मेनविंडो (qtWidgets).QMainWindow, UI_MainWindow): def __init __ (स्व): सुपर (mainwindow, स्व).__अपने आप में.Setupui (स्व) स्व.मॉडल = todomodel () स्व.लोड () स्व.टोडव्यू.SetModel (स्व).मॉडल) स्व.AddButton.प्रेस.कनेक्ट (स्व).जोड़ें) स्व.डिलीटबटन.प्रेस.कनेक्ट (स्व).हटाएं) स्व.पूरा.प्रेस.कनेक्ट (स्व).पूरा) def जोड़ें (स्व): "" "हमारी TODO सूची में एक आइटम जोड़ें, QlineEdit से पाठ प्राप्त करना .Todoedit और वहाँ इसे साफ करना. "" "पाठ = स्व.टोडोडिट.पाठ () यदि पाठ: # खाली तार न जोड़ें. # मॉडल के माध्यम से सूची का उपयोग करें. खुद.नमूना.सब.परिशिष्ट (गलत, पाठ)) # ट्रिगर रिफ्रेश. खुद.नमूना.लेआउटचेंज किया हुआ.EMIT () # इनपुट स्वयं को खाली करें.टोडोडिट.SETTEXT ("") स्व.सहेजें () def डिलीट (स्व): अनुक्रमित = स्व.टोडव्यू.SelectedDindexes () यदि अनुक्रमित: # इंडेक्स एकल-चयन में एकल आइटम की एक सूची है. इंडेक्स = इंडेक्स [0] # आइटम निकालें और रिफ्रेश करें. डेल स्व.नमूना.टोडोस [सूचकांक.पंक्ति ()] स्व.नमूना.लेआउटचेंज किया हुआ.EMIT () # चयन को साफ़ करें (क्योंकि यह कोई लंबी मान्य नहीं है). खुद.टोडव्यू.क्लेरेलेक्शन () स्व.सहेजें () पूर्ण पूर्ण (स्व): अनुक्रमित = स्व.टोडव्यू.चयन करें.पंक्ति () स्थिति, पाठ = स्व.नमूना.टोडोस [पंक्ति] स्व.नमूना.टोडोस [पंक्ति] = (सच, पाठ) # .Datachanged शीर्ष-बाएं और नीचे दाईं ओर लेता है, जो एक एकल चयन के लिए # बराबर हैं. खुद.नमूना.अचूक.EMIT (इंडेक्स, इंडेक्स) # चयन को साफ़ करें (क्योंकि यह कोई लंबी मान्य नहीं है). खुद.टोडव्यू.क्लेरेलेक्शन () स्व.सहेजें () def लोड (स्व): प्रयास करें: खुले के साथ ('डेटा.db ',' r ') f: स्व.नमूना.टोडोस = JSON.लोड (एफ) अपवाद अपवाद: पास डिफ सेव (स्व): ओपन के साथ ('डेटा (' डेटा.db ',' w ') के रूप में f: data = json.डंप (स्व).नमूना.टोडोस, एफ) ऐप = क्यूटीविडगेट्स.QApplication (sys).Argv) विंडो = mainwindow () विंडो.शो () ऐप.Exec_ ()
यदि आपके एप्लिकेशन के डेटा में बड़े या अधिक जटिल होने की क्षमता है, तो आप इसे संग्रहीत करने के लिए एक वास्तविक डेटाबेस का उपयोग करने के लिए पूर्वनिर्मित हो सकते हैं. इस मामले में मॉडल डेटाबेस में इंटरफ़ेस लपेटेगा और इसे डेटाबेस के लिए सीधे क्वेरी करेगा. आगामी ट्यूटोरियल में यह कैसे करना है.
QlistView के एक और दिलचस्प उदाहरण के लिए इस उदाहरण मीडिया प्लेयर एप्लिकेशन को देखें. यह क्यूटी बिल्डिंग QmediaplayList का उपयोग डेटास्टोर के रूप में करता है, जिसमें सामग्री एक QListView के लिए प्रदर्शित होती है .
बीसीआर के बारे में.CX:
बीसीआर.सीएक्स एक ब्राजील की प्रौद्योगिकी स्टार्टअप है, जो दोनों व्यावसायिक आउटसोर्सिंग प्रक्रियाओं (बीपीओ) और कारोबारी माहौल आउटसोर्सिंग (बीईओ) दोनों में विशेष है, मुख्य रूप से मांग पीढ़ी, ग्राहक अनुभव, संचार, उपयोगकर्ता समर्थन और संतुष्टि पर केंद्रित है.
विवरण:
TODO ऐप को कार्यदिवस के दौरान एजेंट के नोट्स को संग्रहीत करने के लिए एक त्वरित, सुरक्षित और उपयोगकर्ता के अनुकूल तरीके के रूप में विकसित किया गया था.
प्रत्येक व्यक्तिगत टिकट या ग्राहक के आधार पर, अपने स्वयं के कार्यों को बनाने और प्रबंधित करने में सक्षम हो.
ट्रेल्स बनाएं और अपने वर्कफ़्लो को अनुकूलित करें
उत्पादकता में वृद्धि! TODO ऐप का उपयोग करके आप बार -बार प्रक्रियाओं को मानकीकृत करने के लिए अनुकूलित वर्कफ़्लो बना सकते हैं. अभी प्रयास करें और अपनी प्रगति को नियंत्रित करना शुरू करें, अपने टोडोस और डॉन्स के रूप में.
संसाधन:
- प्रत्येक टिकट के लिए कार्य बनाएं
- प्रगति बार डिलीवर करने योग्य का पालन करने के लिए
- उत्पादकता बढ़ाने के लिए मानकीकृत वर्कफ़्लो बनाएं.
- अपनी दैनिक दिनचर्या के साथ इसे बनाए रखने के लिए, अपनी कार्य सूची का प्रबंधन करें.
- ऐप सुविधाओं पर पूर्ण पहुंच प्राप्त करने के लिए टोडो और ज़ेंडेस्क धूप दोनों को ढेर करें
- टास्क ऑटोमेशन बनाकर या संपादित करके उत्पादकता में सुधार करें, और अपने व्यक्तिगत प्रीसेट को बचाएं.