paint-brush
टिंकर के साथ अपना पहला पायथन जीयूआई बनानाद्वारा@pictureinthenoise
8,720 रीडिंग
8,720 रीडिंग

टिंकर के साथ अपना पहला पायथन जीयूआई बनाना

द्वारा Picture in the Noise13m2022/11/14
Read on Terminal Reader
Read this story w/o Javascript

बहुत लंबा; पढ़ने के लिए

Tkinter GUI के निर्माण के लिए Python का मानक है और इसे Python Standard Library के साथ शामिल किया गया है। यह मार्गदर्शिका बुनियादी Tkinter अवधारणाओं को समझाने के लिए एक साधारण GUI एप्लिकेशन के डिज़ाइन के माध्यम से चलती है, जिसमें GUI तत्वों का लेआउट, उपयोगकर्ता इनपुट कैप्चर करना और GUI तत्वों को कॉलबैक विधियों के लिए बाध्य करना शामिल है।

People Mentioned

Mention Thumbnail
featured image - टिंकर के साथ अपना पहला पायथन जीयूआई बनाना
Picture in the Noise HackerNoon profile picture

परिचय

शायद आपने अभी-अभी पायथन सीखना शुरू किया है और एक या दो सरल एप्लिकेशन बनाए हैं। बधाई हो! लेकिन, अब क्या? ठीक है, अपने चमकदार, नए पायथन ऐप के साथ बातचीत करने के लिए ग्राफिकल यूजर इंटरफेस ("जीयूआई") बनाने के बारे में कैसे?


Python के साथ GUI एप्लिकेशन बनाने के लिए कई विकल्प हैं, जिनमें PyQt और wxPython शामिल हैं। हालाँकि, यह मार्गदर्शिका आपको टिंकर से परिचित कराएगी


Tkinter , जो "Tk इंटरफ़ेस" के लिए खड़ा है, GUI के निर्माण के लिए Python का मानक है और इसे Python Standard Library के साथ शामिल किया गया है। यह टीके जीयूआई टूलकिट के लिए बाध्यकारी है, जीयूआई विजेट्स की एक मुक्त, ओपन-सोर्स लाइब्रेरी जिसका उपयोग विभिन्न प्रोग्रामिंग भाषाओं में ग्राफिकल इंटरफेस बनाने के लिए किया जा सकता है।


यह ट्यूटोरियल एक बुनियादी जीयूआई एप्लिकेशन के डिजाइन के माध्यम से चलता है जो उपयोगकर्ता द्वारा चुने गए समय क्षेत्र में स्थानीय समय प्रदर्शित करता है। चरण एप्लिकेशन को उत्तरोत्तर बनाते हैं और Tkinter के साथ काम करते समय कुछ प्रमुख अवधारणाओं का वर्णन करते हैं, जिसमें GUI तत्वों का लेआउट, उपयोगकर्ता इनपुट कैप्चर करना और GUI तत्वों को कॉलबैक विधियों के लिए बाध्य करना शामिल है।


आवश्यक शर्तें

इस गाइड को पूरा करने के लिए, आपके पास यह होना चाहिए:


  • स्थापित पायथन
  • स्थापित pip
  • pytz लाइब्रेरी स्थापित की। पुस्तकालय को pip का उपयोग करके स्थापित किया जा सकता है।


 pip install pytz


यह मार्गदर्शिका शब्दावली रूट विंडो और मुख्य विंडो का परस्पर उपयोग करेगी।


चरण 1 - एक नया पायथन एप्लिकेशन बनाएं और आवश्यक आयात सेट करें

timezone.py नामक एक नया पायथन एप्लिकेशन बनाएं और Tkinter , datetime , और pytz मॉड्यूल को आयात करने के लिए निम्नलिखित import विवरण जोड़ें।


 import tkinter as tk import datetime import pytz


चरण 2 - समय क्षेत्र जोड़ें

इस गाइड में यूनाइटेड स्टेट्स टाइमज़ोन का सेट शामिल है जो pytz द्वारा समर्थित pytz का एक छोटा सा अंश है। अतिरिक्त pytz नाम जोड़कर एप्लिकेशन की कार्यक्षमता को बढ़ाया जा सकता है। pytz के साथ उपलब्ध pytz की पूरी सूची निम्न कमांड को चलाकर आउटपुट की जा सकती है:


 print(pytz.all_timezones)


pytz के माध्यम से उपलब्ध युनाइटेड स्टेट्स pytz के सेट को सूची के रूप में निर्दिष्ट किया गया है।


 import tkinter as tk import datetime import pytz timezones = ["US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"]


चरण 3 - Tk Class का एक उदाहरण बनाएं

Tk क्लास को इंस्टेंट करने से एक रूट विंडो बनती है जो टाइमज़ोन एप्लिकेशन के GUI की मुख्य विंडो के रूप में काम करेगी।


 import tkinter as tk import datetime import pytz timezones = ["US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"] root = tk.Tk()


चरण 4 - मुख्य विंडो सेट करें

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

चरण 4a - मुख्य विंडो शीर्षक सेट करना

विंडो शीर्षक title विधि का उपयोग करके सेट किया गया है।


 import tkinter as tk import datetime import pytz timezones = ["US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"] root = tk.Tk() root.title("Simple Timezone Application")

चरण 4 बी - मुख्य विंडो की चौड़ाई और ऊंचाई निर्धारित करना

विंडो की चौड़ाई और ऊंचाई के मान, पिक्सल में व्यक्त किए जा सकते हैं, कोड का पालन करना आसान बनाने के लिए वेरिएबल को असाइन किया जा सकता है।


 import tkinter as tk import datetime import pytz timezones = ["US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"] root = tk.Tk() root.title("Simple Timezone Application") window_width = 450 window_height = 175

चरण 4c - मुख्य विंडो केंद्र स्थिति की गणना

मुख्य विंडो को स्क्रीन पर कहीं भी रखा जा सकता है, उदाहरण के लिए केंद्र में, ऊपरी-बाएँ कोने में, आदि। एक केंद्रित विंडो एक अच्छा "लुक" प्रदान करती है और मुख्य विंडो के लिए केंद्र की स्थिति को रूट विंडो के winfo_screenwidth() का उपयोग करके निर्धारित किया जा सकता है। winfo_screenwidth() और winfo_screenheight() विधियों के साथ-साथ कुछ सरल गणित। ये दो विधियाँ स्क्रीन की चौड़ाई और स्क्रीन की ऊँचाई लौटाती हैं जिनका उपयोग मुख्य विंडो को केन्द्रित करने के लिए उपयुक्त (x, y) निर्देशांक की गणना के लिए किया जाता है। विंडो की चौड़ाई और ऊंचाई की तरह, कोड को और अधिक पठनीय बनाने के लिए केंद्र स्थिति मान भी चरों को सौंपा जा सकता है।


 import tkinter as tk import datetime import pytz timezones = ["US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"] root = tk.Tk() root.title("Simple Timezone Application") window_width = 450 window_height = 175 screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() center_x = int((screen_width - window_width)/2) center_y = int((screen_height - window_height)/2)


ध्यान दें कि center_x और center_y मान भी पिक्सेल में व्यक्त किए जाते हैं और int का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि दोनों परिकलित मान पूर्णांक हैं।

चरण 4d - मुख्य विंडो ज्यामिति सेट करना

root विंडो ज्यामिति, जो मुख्य विंडो के आकार और स्थिति को निर्दिष्ट करती है, रूट विंडो की geometry पद्धति का उपयोग करके सेट की जाती है। चीजों को सरल बनाने के लिए, आप एक स्वरूपित स्टिंग शाब्दिक, या f-string का उपयोग कर सकते हैं, जो रनटाइम पर ज्यामिति चर अभिव्यक्तियों को प्रक्षेपित करेगा। निम्नलिखित कोड ब्लॉक के अनुसार, f-स्ट्रिंग शाब्दिक को एक पैरामीटर के रूप में geometry विधि में पास किया जाता है।


 import tkinter as tk import datetime import pytz timezones = ["US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"] root = tk.Tk() root.title("Simple Timezone Application") window_width = 450 window_height = 175 screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() center_x = int((screen_width - window_width)/2) center_y = int((screen_height - window_height)/2) root.geometry(f"{window_width}x{window_height}+{center_x}+{center_y}")


चरण 4e - मुख्य विंडो आकार बदलने की सेटिंग


इसके x और y अक्षों के साथ रूट विंडो की आकार बदलने की क्षमता को रूट विंडो के resizable विधि के माध्यम से सेट किया जा सकता है। resizable विधि उस क्रम में height और width पैरामीटर स्वीकार करती है। किसी भी पैरामीटर के लिए एक True या गैर-शून्य मान निर्दिष्ट करता है कि मुख्य विंडो संबद्ध अक्ष के साथ आकार बदलने योग्य है। किसी भी पैरामीटर के लिए एक False या 0 मान निर्दिष्ट करता है कि मुख्य विंडो दिए गए अक्ष के साथ आकार बदलने योग्य नहीं है। मुख्य विंडो का आकार बदलने से रोकने के लिए टाइमर एप्लिकेशन ऊंचाई और चौड़ाई दोनों के लिए False के मान का उपयोग करेगा।


 import tkinter as tk import datetime import pytz timezones = ["US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"] root = tk.Tk() root.title("Simple Timezone Application") window_width = 450 window_height = 175 screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() center_x = int((screen_width - window_width)/2) center_y = int((screen_height - window_height)/2) root.geometry(f"{window_width}x{window_height}+{center_x}+{center_y}") root.resizable(False, False)


चरण 5 - विजेट लेआउट के लिए एक ग्रिड निर्दिष्ट करें

ज्यामिति प्रबंधकों का उपयोग करके विजेट को मुख्य विंडो के शीर्ष पर विभिन्न तरीकों से व्यवस्थित किया जा सकता है। आम तौर पर, विगेट्स को 3 तरीकों से व्यवस्थित किया जा सकता है:


  1. पैक pack() विधि का उपयोग करके पैक किया गया। pack() ज्योमेट्री मैनेजर विजेट्स को रूट विंडो या पैरेंट विजेट में जोड़े जाने से पहले उन्हें ब्लॉक में व्यवस्थित करता है। पैकिंग के बारे में सोचने का एक अपूर्ण लेकिन शायद उपयोगी तरीका किराने की वस्तुओं को किराने की थैली में जोड़ने के बारे में सोचना है। जरूरी नहीं कि आइटम बैग में पूर्व-निर्धारित स्थानों में जोड़े जाएं। इसके बजाय, वे उपलब्ध स्थान का उपयोग करके एक के बाद एक पैक किए जाते हैं, जब तक कि सभी वस्तुओं को बैग में नहीं रखा जाता है। pack() ज्यामिति प्रबंधक इसी तरह से काम करता है।

  2. place() विधि का उपयोग करके रखा गया। place() ज्यामिति प्रबंधक विजेट को रूट विंडो या पैरेंट विजेट में विशिष्ट, पूर्व-निर्धारित स्थितियों में रखता है। सटीक GUI लेआउट बनाते समय यह ज्यामिति प्रबंधक स्पष्ट रूप से उपयोगी है।

  3. grid() विधि का उपयोग करके ग्रिड के रूप में व्यवस्थित। ग्रिड 2-आयामी पंक्ति/स्तंभ तालिकाएँ हैं। विजेट को उस विशेष पंक्ति और कॉलम को निर्दिष्ट करके ग्रिड में जोड़ा जाता है जहां विजेट रखा जाना चाहिए। ग्रिड को रूट विंडो के columnconfigure और rowconfigure मेथड का उपयोग करके सेटअप किया जाता है। इनमें से प्रत्येक विधि में एक index और एक weight विशेषता होती है। index विशेषता 0 के आरंभिक आधार का उपयोग करके स्तंभ या पंक्ति की स्थिति निर्दिष्ट करती है। weight विशेषता अन्य स्तंभों के सापेक्ष किसी विशेष स्तंभ या पंक्ति के आकार को निर्दिष्ट करती है। उदाहरण के लिए, यदि कॉलम 0 का वजन 1 है और कॉलम 1 का वजन 3 है, तो कॉलम 1 कॉलम 0 से 3 गुना बड़ा होगा।


तत्वों को एक-दूसरे के बगल में रखते समय ग्रिड आसान होते हैं और वे लागू करने के लिए अपेक्षाकृत सरल होते हैं। टाइमज़ोन एप्लिकेशन 4 बराबर कॉलम में विभाजित एक मुख्य विंडो ग्रिड का उपयोग करेगा।


 import tkinter as tk import datetime import pytz timezones = ["US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"] root = tk.Tk() root.title("Simple Timezone Application") window_width = 450 window_height = 175 screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() center_x = int((screen_width - window_width)/2) center_y = int((screen_height - window_height)/2) root.geometry(f"{window_width}x{window_height}+{center_x}+{center_y}") root.resizable(False, False) root.columnconfigure(0, weight=1) root.columnconfigure(1, weight=1) root.columnconfigure(2, weight=1) root.columnconfigure(3, weight=1)


चरण 6 - विजेट जोड़ें

इस चरण में, चरण 4 में परिभाषित मुख्य विंडो ग्रिड में विजेट जोड़े जाते हैं। टाइमज़ोन एप्लिकेशन 3 TKinter विजेट का उपयोग करेगा:


  • Label
  • Listbox
  • Button


टिंकर के Label और Button विजेट ठीक वैसे ही हैं जैसे उनका नाम रखा गया है। Label विजेट प्रोग्रामर को टेक्स्ट (यानी एक लेबल) प्रदर्शित करने की अनुमति देता है, और Button विजेट का उपयोग बटन प्रदर्शित करने के लिए किया जाता है। Listbox विजेट का उपयोग विकल्पों की सूची से एक मान (या मान) का चयन करने के लिए किया जाता है।

बेशक, ऊपर सूचीबद्ध 3 के अलावा अन्य विजेट भी हैं, जैसे कि SpinBox , Entry और Message विजेट। Tk टूलकिट के माध्यम से उपलब्ध विजेट्स के बारे में अधिक जानने के लिए औपचारिक Tk कमांड प्रलेखन एक उपयोगी संसाधन है।

चरण 6a - विजेट बनाएं

GUI डिज़ाइन के साथ उपयोग किए गए किसी दिए गए विजेट के लिए प्रत्येक विजेट वर्ग का एक उदाहरण बनाया गया है। टाइमज़ोन एप्लिकेशन 4 विजेट इंस्टेंस का उपयोग करता है: 2 Label विजेट, 1 Listbox विजेट और 1 Button विजेट।


 import tkinter as tk import datetime import pytz timezones = ["US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"] root = tk.Tk() root.title("Simple Timezone Application") window_width = 450 window_height = 175 screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() center_x = int((screen_width - window_width)/2) center_y = int((screen_height - window_height)/2) root.geometry(f"{window_width}x{window_height}+{center_x}+{center_y}") root.resizable(False, False) root.columnconfigure(0, weight=1) root.columnconfigure(1, weight=1) root.columnconfigure(2, weight=1) root.columnconfigure(3, weight=1) # Instance of Label widget class for selection prompt. select_timezone_label = tk.Label(root, text="Please select a timezone.") # Instance of Listbox class for selection of timezone from list. list_var = tk.Variable(value=timezones) select_timezone_listbox = tk.Listbox(root, listvariable=list_var, height=1) # Instance of Button class to get the local time in the selected timezone. select_timezone_button = tk.Button(root, text="Get Time") # Second instance of the Label class to display the local time in the selected timezone. time_label = tk.Label(root, text="")


जैसा कि ऊपर दिए गए कोड ब्लॉक में देखा गया है, प्रत्येक विजेट इंस्टेंस root विंडो में "संलग्न" है। Listbox विजेट को एक विशेष टिंकर Variable() वर्ग की तात्कालिकता की भी आवश्यकता होती है जिसका उपयोग विजेट को टाइमज़ोन विकल्पों की सूची के साथ आपूर्ति करने के लिए किया जाता है जिसे उपयोगकर्ता listvariable Listbox परिवर्तनीय विशेषता के माध्यम से चुन सकता है। प्रत्येक Label विजेट द्वारा प्रदर्शित टेक्स्ट को text विशेषता का उपयोग करके कॉन्फ़िगर किया जा सकता है। time_label के लिए टेक्स्ट मान खाली छोड़ दिया गया है क्योंकि यह हर बार उपयोगकर्ता द्वारा चयनित टाइमज़ोन के लिए "प्राप्त" होने पर गतिशील रूप से सेट किया जाएगा।

चरण 6बी - विजेट्स को ग्रिड पर रखें

चरण 5ए में बनाए गए विजेट इंस्टेंस को grid() विधि का उपयोग करके चरण 4 में परिभाषित ग्रिड पर रखा जा सकता है। लेआउट को परिभाषित करने के लिए टाइमज़ोन एप्लिकेशन निम्नलिखित grid() विधि विशेषताओं का उपयोग करेगा:


  • column : उस विशेष कॉलम को निर्दिष्ट करता है जहां विजेट को 0 आधार का उपयोग करके रखा जाएगा।

  • row : उस विशेष पंक्ति को निर्दिष्ट करता है जहां विजेट को 0 आधार का उपयोग करके रखा जाएगा।

  • columnspan : निर्दिष्ट करता है कि विजेट को निर्दिष्ट कॉलम की संख्या में होना चाहिए। उदाहरण के लिए, एक columnspan=3 मान वाला विजेट 3 कॉलम तक फैला होगा, भले ही विजेट स्वयं 3 कॉलम से छोटा हो।

  • sticky : टिंकर का डिफ़ॉल्ट व्यवहार एक विजेट को सेल के क्षैतिज और लंबवत केंद्र (यानी विशेष पंक्ति/स्तंभ स्थिति) में रखना है जहां इसे रखा गया है। इस डिफ़ॉल्ट व्यवहार को sticky विशेषता का उपयोग करके ओवरराइड किया जा सकता है जो विजेट के सेल के भीतर किसी विशेष स्थान पर विजेट को संरेखित करने के लिए NW , N , NE , W , E , SW , S , और SE सहित कंपास जैसे मानों का उपयोग करता है। उदाहरण के लिए, sticky=tK.W निर्दिष्ट करता है कि विजेट को उसके ग्रिड सेल के पश्चिमी कोने में संरेखित किया जाना चाहिए। समान रूप से, sticky=tK.E निर्दिष्ट करता है कि विजेट को उसके ग्रिड सेल के पूर्वी कोने में संरेखित किया जाना चाहिए।

  • padx , pady : padx और pady विशेषताओं का उपयोग पिक्सल में निर्दिष्ट मानों के साथ क्रमशः एक्स-अक्ष और वाई-अक्ष पैडिंग जोड़ने के लिए किया जाता है। स्वाभाविक रूप से, पैडिंग एक अधिक पेशेवर दिखने वाला GUI प्रदान कर सकता है जो यह सुनिश्चित करता है कि विजेट रूट विंडो या अन्य विजेट के किनारों के खिलाफ सीधे "टक्कर" न दें।


 import tkinter as tk import datetime import pytz timezones = ["US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"] root = tk.Tk() root.title("Simple Timezone Application") window_width = 450 window_height = 175 screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() center_x = int((screen_width - window_width)/2) center_y = int((screen_height - window_height)/2) root.geometry(f"{window_width}x{window_height}+{center_x}+{center_y}") root.resizable(False, False) root.columnconfigure(0, weight=1) root.columnconfigure(1, weight=1) root.columnconfigure(2, weight=1) root.columnconfigure(3, weight=1) # Instance of Label widget class for selection prompt. select_timezone_label = tk.Label(root, text="Please select a timezone.") # Instance of Listbox class for selection of timezone from list. list_var = tk.Variable(value=timezones) select_timezone_listbox = tk.Listbox(root, listvariable=list_var, height=1) # Instance of Button class to get the local time in the selected timezone. select_timezone_button = tk.Button(root, text="Get Time") # Second instance of the Label class to display the local time in the selected timezone. time_label = tk.Label(root, text="") # Place widgets on grid. select_timezone_label.grid(column=0, row=0, columnspan=4, sticky=tk.W, padx=10, pady=10) select_timezone_listbox.grid(column=0, row=1, columnspan=3, sticky=tk.EW, padx=10, pady=10) select_timezone_button.grid(column=4, row=1, sticky=tk.E, padx=10, pady=10) time_label.grid(column=0, row=4, columnspan=4, sticky=tk.W, padx=10, pady=10)


चरण 7 - बनाएँ समय बटन कॉलबैक विधि प्राप्त करें

जब उपयोगकर्ता चरण 5 में बनाए गए select_timezone_button बटन पर क्लिक करता है, तो ईवेंट को संभालने के लिए कॉलबैक विधि को परिभाषित करने की आवश्यकता होती है।

चरण 7a - गेट टाइम बटन को बाइंड करना

कॉलबैक लॉजिक को परिभाषित करने से पहले, पहले बटन को विधि नाम से बाँधना मददगार होता है जो अंततः कॉलबैक कोड को शामिल कर लेगा। bind() विधि का उपयोग lambda फ़ंक्शन के साथ select_timezone_button को निर्दिष्ट कॉलबैक विधि से बाँधने के लिए किया जा सकता है। साथ ही, ध्यान दें कि lambda फ़ंक्शन का उपयोग कॉलबैक पैरामीटर के रूप में select_timezone_listbox और time_label विजेट के संदर्भों को पास करने के लिए किया जाता है। ये कॉलबैक पैरामीटर वास्तव में आवश्यक नहीं हैं क्योंकि select_timezone_listbox और time_label वैश्विक दायरे में हैं। हालांकि, यह प्रदर्शित करने के लिए तर्कसंगत रूप से उपयोगी है कि कॉलबैक फ़ंक्शन में तर्क कैसे पारित किए जा सकते हैं।


 import tkinter as tk import datetime import pytz timezones = ["US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"] root = tk.Tk() root.title("Simple Timezone Application") window_width = 450 window_height = 175 screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() center_x = int((screen_width - window_width)/2) center_y = int((screen_height - window_height)/2) root.geometry(f"{window_width}x{window_height}+{center_x}+{center_y}") root.resizable(False, False) root.columnconfigure(0, weight=1) root.columnconfigure(1, weight=1) root.columnconfigure(2, weight=1) root.columnconfigure(3, weight=1) # Instance of Label widget class for selection prompt. select_timezone_label = tk.Label(root, text="Please select a timezone.") # Instance of Listbox class for selection of timezone from list. list_var = tk.Variable(value=timezones) select_timezone_listbox = tk.Listbox(root, listvariable=list_var, height=1) # Instance of Button class to get the local time in the selected timezone. select_timezone_button = tk.Button(root, text="Get Time") # Second instance of the Label class to display the local time in the selected timezone. time_label = tk.Label(root, text="") # Place widgets on grid. select_timezone_label.grid(column=0, row=0, columnspan=4, sticky=tk.W, padx=10, pady=10) select_timezone_listbox.grid(column=0, row=1, columnspan=3, sticky=tk.EW, padx=10, pady=10) select_timezone_button.grid(column=4, row=1, sticky=tk.E, padx=10, pady=10) time_label.grid(column=0, row=4, columnspan=4, sticky=tk.W, padx=10, pady=10) select_timezone_button.bind("<Button>", lambda e, args=[select_timezone_listbox, time_label]: get_timezone_time(e, args))

चरण 7b - कॉलबैक तर्क को परिभाषित करना

बटन क्लिक घटनाओं को संभालने के लिए कॉलबैक तर्क नीचे परिभाषित किया गया है।


 def get_timezone_time(e, args): select_timezone_listbox = args[0] time_label = args[1] selection_index = select_timezone_listbox.curselection() selected_timezone = select_timezone_listbox.get(selection_index) now_time = datetime.datetime.now() tz_time = now_time.astimezone(pytz.timezone(selected_timezone)) tz_formatted = tz_time.strftime("%H:%M:%S") time_label.configure({"text": f"The time in {selected_timezone} is {tz_formatted}."}) time_label.update()


curselection() और get() विधियों का उपयोग उपयोगकर्ता के चयनित समय क्षेत्र को select_timezone_listbox विजेट के संदर्भ से पुनर्प्राप्त करने के लिए किया जाता है। उपयोगकर्ता का वर्तमान समय तब चयनित समय क्षेत्र समय में परिवर्तित हो जाता है। अंत में, चयनित समयक्षेत्र में स्थानीय समय के साथ time_label के संदर्भ की text विशेषता को बदलने के लिए configure विधि का उपयोग किया जाता है। ध्यान दें कि update() विधि का उपयोग time_label विजेट को नए टेक्स्ट मान के साथ खुद को अपडेट करने के लिए "बल" करने के लिए किया जाता है।

चरण 8 - एप्लिकेशन को पूरा करें और चलाएं

रूट विंडो की mainloop() विधि कोड की अंतिम पंक्ति के रूप में लागू होती है। mainloop() विधि उपयोगकर्ता के बाहर निकलने तक GUI को एक अनंत लूप में चलाएगी।


पूरा कोड इस प्रकार है:


 import tkinter as tk import datetime import pytz timezones = ["US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"] def get_timezone_time(e, args): select_timezone_listbox = args[0] time_label = args[1] selection_index = select_timezone_listbox.curselection() selected_timezone = select_timezone_listbox.get(selection_index) now_time = datetime.datetime.now() tz_time = now_time.astimezone(pytz.timezone(selected_timezone)) tz_formatted = tz_time.strftime("%H:%M:%S") time_label.configure({"text": f"The time in {selected_timezone} is {tz_formatted}."}) time_label.update() root = tk.Tk() root.title("Simple Timezone Application") window_width = 450 window_height = 175 screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() center_x = int((screen_width - window_width)/2) center_y = int((screen_height - window_height)/2) root.geometry(f"{window_width}x{window_height}+{center_x}+{center_y}") root.resizable(False, False) root.columnconfigure(0, weight=1) root.columnconfigure(1, weight=1) root.columnconfigure(2, weight=1) root.columnconfigure(3, weight=1) # Instance of Label widget class for selection prompt. select_timezone_label = tk.Label(root, text="Please select a timezone.") # Instance of Listbox class for selection of timezone from list. list_var = tk.Variable(value=timezones) select_timezone_listbox = tk.Listbox(root, listvariable=list_var, height=1) # Instance of Button class to get the local time in the selected timezone. select_timezone_button = tk.Button(root, text="Get Time") # Second instance of the Label class to display the local time in the selected timezone. time_label = tk.Label(root, text="") # Place widgets on grid. select_timezone_label.grid(column=0, row=0, columnspan=4, sticky=tk.W, padx=10, pady=10) select_timezone_listbox.grid(column=0, row=1, columnspan=3, sticky=tk.EW, padx=10, pady=10) select_timezone_button.grid(column=4, row=1, sticky=tk.E, padx=10, pady=10) time_label.grid(column=0, row=4, columnspan=4, sticky=tk.W, padx=10, pady=10) # Bind button to callback. select_timezone_button.bind("<Button>", lambda e, args=[select_timezone_listbox, time_label]: get_timezone_time(e, args)) root.mainloop()


जब एप्लिकेशन लॉन्च किया जाता है, तो जीयूआई इस तरह दिखना चाहिए:




एप्लिकेशन का उपयोग करने के लिए, सूची बॉक्स पर क्लिक करें और टाइमज़ोन विकल्पों में स्क्रॉल करने के लिए अपने कीबोर्ड की अप/डाउन कर्सर कुंजियों का उपयोग करें। अपने चयनित समय क्षेत्र में वर्तमान समय प्रदर्शित करने के लिए गेट टाइम बटन पर क्लिक करें।




अगले कदम

टिंकर के साथ अपना पहला पायथन जीयूआई एप्लिकेशन बनाने के लिए बधाई ! जैसा कि परिचय में उल्लेख किया गया है, यह मार्गदर्शिका आपको कुछ बुनियादी अवधारणाओं से परिचित कराने के लिए डिज़ाइन की गई थी। पहले उल्लेखित पायथन स्टैंडर्ड लाइब्रेरी प्रलेखन और टी कमांड प्रलेखन संदर्भ दो शानदार संसाधन हैं जो आपको अधिक उन्नत टिंकर सुविधाओं और कार्यक्षमता के बारे में जानने में मदद करते हैं।


टिंकर जीयूआई अनुप्रयोगों की कभी-कभी एक गैर-देशी रूप-रंग के रूप में आलोचना की जाती है। यह सच हो सकता। लेकिन टूलकिट विजेट अत्यधिक विन्यास योग्य हैं और टिंकर जीयूआई अनुप्रयोगों को किसी भी बाहरी पायथन पैकेज को स्थापित करने की आवश्यकता के बिना अपेक्षाकृत तेज़ी से बनाया जा सकता है।


औपचारिक दस्तावेज़ीकरण के अलावा, टिंकर के साथ अधिक परिष्कृत जीयूआई अनुप्रयोगों के निर्माण के बारे में जानने के लिए इंटरनेट के माध्यम से असंख्य ट्यूटोरियल उपलब्ध हैं।