परिचय शायद आपने अभी-अभी पायथन सीखना शुरू किया है और एक या दो सरल एप्लिकेशन बनाए हैं। बधाई हो! लेकिन, अब क्या? ठीक है, अपने चमकदार, नए पायथन ऐप के साथ बातचीत करने के लिए ग्राफिकल यूजर इंटरफेस ("जीयूआई") बनाने के बारे में कैसे? Python के साथ GUI एप्लिकेशन बनाने के लिए कई विकल्प हैं, जिनमें और शामिल हैं। हालाँकि, यह मार्गदर्शिका आपको टिंकर से । PyQt wxPython परिचित कराएगी , जो "Tk इंटरफ़ेस" के लिए खड़ा है, GUI के निर्माण के लिए Python का मानक है और इसे के साथ शामिल किया गया है। यह के लिए बाध्यकारी है, जीयूआई की एक मुक्त, ओपन-सोर्स लाइब्रेरी जिसका उपयोग विभिन्न प्रोग्रामिंग भाषाओं में ग्राफिकल इंटरफेस बनाने के लिए किया जा सकता है। Tkinter Python Standard Library टीके जीयूआई टूलकिट विजेट्स यह ट्यूटोरियल एक बुनियादी जीयूआई एप्लिकेशन के डिजाइन के माध्यम से चलता है जो उपयोगकर्ता द्वारा चुने गए समय क्षेत्र में स्थानीय समय प्रदर्शित करता है। चरण एप्लिकेशन को उत्तरोत्तर बनाते हैं और के साथ काम करते समय कुछ प्रमुख अवधारणाओं का वर्णन करते हैं, जिसमें GUI तत्वों का लेआउट, उपयोगकर्ता इनपुट कैप्चर करना और GUI तत्वों को कॉलबैक विधियों के लिए बाध्य करना शामिल है। Tkinter आवश्यक शर्तें इस गाइड को पूरा करने के लिए, आपके पास यह होना चाहिए: । स्थापित पायथन स्थापित । 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 का एक उदाहरण बनाएं क्लास को इंस्टेंट करने से एक बनती है जो टाइमज़ोन एप्लिकेशन के GUI की मुख्य विंडो के रूप में काम करेगी। Tk रूट विंडो 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 - मुख्य विंडो केंद्र स्थिति की गणना मुख्य विंडो को स्क्रीन पर कहीं भी रखा जा सकता है, उदाहरण के लिए केंद्र में, ऊपरी-बाएँ कोने में, आदि। एक केंद्रित विंडो एक अच्छा "लुक" प्रदान करती है और मुख्य विंडो के लिए केंद्र की स्थिति को रूट विंडो के का उपयोग करके निर्धारित किया जा सकता है। और विधियों के साथ-साथ कुछ सरल गणित। ये दो विधियाँ स्क्रीन की चौड़ाई और स्क्रीन की ऊँचाई लौटाती हैं जिनका उपयोग मुख्य विंडो को केन्द्रित करने के लिए उपयुक्त (x, y) निर्देशांक की गणना के लिए किया जाता है। विंडो की चौड़ाई और ऊंचाई की तरह, कोड को और अधिक पठनीय बनाने के लिए केंद्र स्थिति मान भी चरों को सौंपा जा सकता है। winfo_screenwidth() winfo_screenwidth() winfo_screenheight() 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 तरीकों से व्यवस्थित किया जा सकता है: ज्यामिति प्रबंधकों विजेट विधि का उपयोग करके पैक किया गया। ज्योमेट्री मैनेजर विजेट्स को रूट विंडो या पैरेंट विजेट में जोड़े जाने से पहले उन्हें ब्लॉक में व्यवस्थित करता है। के बारे में सोचने का एक अपूर्ण लेकिन शायद उपयोगी तरीका किराने की वस्तुओं को किराने की थैली में जोड़ने के बारे में सोचना है। जरूरी नहीं कि आइटम बैग में पूर्व-निर्धारित स्थानों में जोड़े जाएं। इसके बजाय, वे उपलब्ध स्थान का उपयोग करके एक के बाद एक किए जाते हैं, जब तक कि सभी वस्तुओं को बैग में नहीं रखा जाता है। ज्यामिति प्रबंधक इसी तरह से काम करता है। पैक pack() pack() पैकिंग पैक pack() विधि का उपयोग करके गया। ज्यामिति प्रबंधक विजेट को रूट विंडो या पैरेंट विजेट में विशिष्ट, पूर्व-निर्धारित स्थितियों में है। सटीक GUI लेआउट बनाते समय यह ज्यामिति प्रबंधक स्पष्ट रूप से उपयोगी है। place() रखा place() रखता विधि का उपयोग करके के रूप में व्यवस्थित। ग्रिड 2-आयामी पंक्ति/स्तंभ तालिकाएँ हैं। विजेट को उस विशेष पंक्ति और कॉलम को निर्दिष्ट करके ग्रिड में जोड़ा जाता है जहां विजेट रखा जाना चाहिए। ग्रिड को रूट विंडो के और मेथड का उपयोग करके सेटअप किया जाता है। इनमें से प्रत्येक विधि में एक और एक विशेषता होती है। विशेषता के आरंभिक आधार का उपयोग करके स्तंभ या पंक्ति की स्थिति निर्दिष्ट करती है। विशेषता अन्य स्तंभों के सापेक्ष किसी विशेष स्तंभ या पंक्ति के आकार को निर्दिष्ट करती है। उदाहरण के लिए, यदि का वजन है और का वजन है, तो से 3 गुना बड़ा होगा। grid() ग्रिड columnconfigure rowconfigure index weight index 0 weight कॉलम 0 1 कॉलम 1 3 कॉलम 1 कॉलम 0 तत्वों को एक-दूसरे के बगल में रखते समय ग्रिड आसान होते हैं और वे लागू करने के लिए अपेक्षाकृत सरल होते हैं। टाइमज़ोन एप्लिकेशन 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 के अलावा अन्य विजेट भी हैं, जैसे कि , और विजेट। Tk टूलकिट के माध्यम से उपलब्ध विजेट्स के बारे में अधिक जानने के लिए औपचारिक एक उपयोगी संसाधन है। SpinBox Entry Message Tk कमांड प्रलेखन चरण 6a - विजेट बनाएं GUI डिज़ाइन के साथ उपयोग किए गए किसी दिए गए विजेट के लिए प्रत्येक विजेट वर्ग का एक उदाहरण बनाया गया है। टाइमज़ोन एप्लिकेशन 4 विजेट इंस्टेंस का उपयोग करता है: 2 विजेट, 1 विजेट और 1 विजेट। Label Listbox 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ए में बनाए गए विजेट इंस्टेंस को विधि का उपयोग करके चरण 4 में परिभाषित ग्रिड पर रखा जा सकता है। लेआउट को परिभाषित करने के लिए टाइमज़ोन एप्लिकेशन निम्नलिखित विधि विशेषताओं का उपयोग करेगा: grid() grid() : उस विशेष कॉलम को निर्दिष्ट करता है जहां विजेट को आधार का उपयोग करके रखा जाएगा। column 0 : उस विशेष पंक्ति को निर्दिष्ट करता है जहां विजेट को आधार का उपयोग करके रखा जाएगा। row 0 : निर्दिष्ट करता है कि विजेट को निर्दिष्ट कॉलम की संख्या में होना चाहिए। उदाहरण के लिए, एक मान वाला विजेट 3 कॉलम तक फैला होगा, भले ही विजेट स्वयं 3 कॉलम से छोटा हो। columnspan columnspan=3 : टिंकर का डिफ़ॉल्ट व्यवहार एक विजेट को सेल के क्षैतिज और लंबवत केंद्र (यानी विशेष पंक्ति/स्तंभ स्थिति) में रखना है जहां इसे रखा गया है। इस डिफ़ॉल्ट व्यवहार को विशेषता का उपयोग करके ओवरराइड किया जा सकता है जो विजेट के सेल के किसी विशेष स्थान पर विजेट को संरेखित करने के लिए , , , , , , , और सहित कंपास जैसे मानों का उपयोग करता है। उदाहरण के लिए, निर्दिष्ट करता है कि विजेट को उसके ग्रिड सेल के पश्चिमी कोने में संरेखित किया जाना चाहिए। समान रूप से, निर्दिष्ट करता है कि विजेट को उसके ग्रिड सेल के पूर्वी कोने में संरेखित किया जाना चाहिए। sticky sticky भीतर NW N NE W E SW S SE sticky=tK.W sticky=tK.E , : और विशेषताओं का उपयोग पिक्सल में निर्दिष्ट मानों के साथ क्रमशः एक्स-अक्ष और वाई-अक्ष पैडिंग जोड़ने के लिए किया जाता है। स्वाभाविक रूप से, पैडिंग एक अधिक पेशेवर दिखने वाला GUI प्रदान कर सकता है जो यह सुनिश्चित करता है कि विजेट रूट विंडो या अन्य विजेट के किनारों के खिलाफ सीधे "टक्कर" न दें। padx pady padx pady 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 - एप्लिकेशन को पूरा करें और चलाएं रूट विंडो की विधि कोड की अंतिम पंक्ति के रूप में लागू होती है। विधि उपयोगकर्ता के बाहर निकलने तक GUI को एक अनंत लूप में चलाएगी। mainloop() mainloop() पूरा कोड इस प्रकार है: 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() जब एप्लिकेशन लॉन्च किया जाता है, तो जीयूआई इस तरह दिखना चाहिए: एप्लिकेशन का उपयोग करने के लिए, सूची बॉक्स पर क्लिक करें और टाइमज़ोन विकल्पों में स्क्रॉल करने के लिए अपने कीबोर्ड की अप/डाउन कर्सर कुंजियों का उपयोग करें। अपने चयनित समय क्षेत्र में वर्तमान समय प्रदर्शित करने के लिए बटन पर क्लिक करें। गेट टाइम अगले कदम टिंकर के साथ अपना पहला पायथन जीयूआई एप्लिकेशन बनाने के लिए ! जैसा कि परिचय में उल्लेख किया गया है, यह मार्गदर्शिका आपको कुछ बुनियादी अवधारणाओं से परिचित कराने के लिए डिज़ाइन की गई थी। पहले उल्लेखित और संदर्भ दो शानदार संसाधन हैं जो आपको अधिक उन्नत टिंकर सुविधाओं और कार्यक्षमता के बारे में जानने में मदद करते हैं। बधाई पायथन स्टैंडर्ड लाइब्रेरी प्रलेखन टी कमांड प्रलेखन टिंकर जीयूआई अनुप्रयोगों की कभी-कभी एक गैर-देशी रूप-रंग के रूप में आलोचना की जाती है। यह सच हो सकता। लेकिन टूलकिट विजेट अत्यधिक विन्यास योग्य हैं और टिंकर जीयूआई अनुप्रयोगों को किसी भी बाहरी पायथन पैकेज को स्थापित करने की आवश्यकता के बिना अपेक्षाकृत तेज़ी से बनाया जा सकता है। औपचारिक दस्तावेज़ीकरण के अलावा, टिंकर के साथ अधिक परिष्कृत जीयूआई अनुप्रयोगों के निर्माण के बारे में जानने के लिए इंटरनेट के माध्यम से असंख्य ट्यूटोरियल उपलब्ध हैं।