शायद आपने अभी-अभी पायथन सीखना शुरू किया है और एक या दो सरल एप्लिकेशन बनाए हैं। बधाई हो! लेकिन, अब क्या? ठीक है, अपने चमकदार, नए पायथन ऐप के साथ बातचीत करने के लिए ग्राफिकल यूजर इंटरफेस ("जीयूआई") बनाने के बारे में कैसे?
Python के साथ GUI एप्लिकेशन बनाने के लिए कई विकल्प हैं, जिनमें PyQt और wxPython शामिल हैं। हालाँकि, यह मार्गदर्शिका आपको टिंकर से परिचित कराएगी ।
Tkinter , जो "Tk इंटरफ़ेस" के लिए खड़ा है, GUI के निर्माण के लिए Python का मानक है और इसे Python Standard Library के साथ शामिल किया गया है। यह टीके जीयूआई टूलकिट के लिए बाध्यकारी है, जीयूआई विजेट्स की एक मुक्त, ओपन-सोर्स लाइब्रेरी जिसका उपयोग विभिन्न प्रोग्रामिंग भाषाओं में ग्राफिकल इंटरफेस बनाने के लिए किया जा सकता है।
यह ट्यूटोरियल एक बुनियादी जीयूआई एप्लिकेशन के डिजाइन के माध्यम से चलता है जो उपयोगकर्ता द्वारा चुने गए समय क्षेत्र में स्थानीय समय प्रदर्शित करता है। चरण एप्लिकेशन को उत्तरोत्तर बनाते हैं और Tkinter के साथ काम करते समय कुछ प्रमुख अवधारणाओं का वर्णन करते हैं, जिसमें GUI तत्वों का लेआउट, उपयोगकर्ता इनपुट कैप्चर करना और GUI तत्वों को कॉलबैक विधियों के लिए बाध्य करना शामिल है।
इस गाइड को पूरा करने के लिए, आपके पास यह होना चाहिए:
pip
।pytz
लाइब्रेरी स्थापित की। पुस्तकालय को pip
का उपयोग करके स्थापित किया जा सकता है।
pip install pytz
यह मार्गदर्शिका शब्दावली रूट विंडो और मुख्य विंडो का परस्पर उपयोग करेगी।
timezone.py
नामक एक नया पायथन एप्लिकेशन बनाएं और Tkinter
, datetime
, और pytz
मॉड्यूल को आयात करने के लिए निम्नलिखित import
विवरण जोड़ें।
import tkinter as tk import datetime import pytz
इस गाइड में यूनाइटेड स्टेट्स टाइमज़ोन का सेट शामिल है जो 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"]
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()
यह चरण रूट विंडो को कॉन्फ़िगर करता है, विशेष रूप से इसका शीर्षक, ज्यामिति और आकार बदलने की क्षमता।
विंडो शीर्षक 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")
विंडो की चौड़ाई और ऊंचाई के मान, पिक्सल में व्यक्त किए जा सकते हैं, कोड का पालन करना आसान बनाने के लिए वेरिएबल को असाइन किया जा सकता है।
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
मुख्य विंडो को स्क्रीन पर कहीं भी रखा जा सकता है, उदाहरण के लिए केंद्र में, ऊपरी-बाएँ कोने में, आदि। एक केंद्रित विंडो एक अच्छा "लुक" प्रदान करती है और मुख्य विंडो के लिए केंद्र की स्थिति को रूट विंडो के 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
का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि दोनों परिकलित मान पूर्णांक हैं।
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}")
इसके 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)
ज्यामिति प्रबंधकों का उपयोग करके विजेट को मुख्य विंडो के शीर्ष पर विभिन्न तरीकों से व्यवस्थित किया जा सकता है। आम तौर पर, विगेट्स को 3 तरीकों से व्यवस्थित किया जा सकता है:
पैक pack()
विधि का उपयोग करके पैक किया गया। pack()
ज्योमेट्री मैनेजर विजेट्स को रूट विंडो या पैरेंट विजेट में जोड़े जाने से पहले उन्हें ब्लॉक में व्यवस्थित करता है। पैकिंग के बारे में सोचने का एक अपूर्ण लेकिन शायद उपयोगी तरीका किराने की वस्तुओं को किराने की थैली में जोड़ने के बारे में सोचना है। जरूरी नहीं कि आइटम बैग में पूर्व-निर्धारित स्थानों में जोड़े जाएं। इसके बजाय, वे उपलब्ध स्थान का उपयोग करके एक के बाद एक पैक किए जाते हैं, जब तक कि सभी वस्तुओं को बैग में नहीं रखा जाता है। pack()
ज्यामिति प्रबंधक इसी तरह से काम करता है।
place()
विधि का उपयोग करके रखा गया। place()
ज्यामिति प्रबंधक विजेट को रूट विंडो या पैरेंट विजेट में विशिष्ट, पूर्व-निर्धारित स्थितियों में रखता है। सटीक GUI लेआउट बनाते समय यह ज्यामिति प्रबंधक स्पष्ट रूप से उपयोगी है।
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)
इस चरण में, चरण 4 में परिभाषित मुख्य विंडो ग्रिड में विजेट जोड़े जाते हैं। टाइमज़ोन एप्लिकेशन 3 TKinter विजेट का उपयोग करेगा:
Label
Listbox
Button
टिंकर के Label
और Button
विजेट ठीक वैसे ही हैं जैसे उनका नाम रखा गया है। Label
विजेट प्रोग्रामर को टेक्स्ट (यानी एक लेबल) प्रदर्शित करने की अनुमति देता है, और Button
विजेट का उपयोग बटन प्रदर्शित करने के लिए किया जाता है। Listbox
विजेट का उपयोग विकल्पों की सूची से एक मान (या मान) का चयन करने के लिए किया जाता है।
बेशक, ऊपर सूचीबद्ध 3 के अलावा अन्य विजेट भी हैं, जैसे कि SpinBox
, Entry
और Message
विजेट। Tk टूलकिट के माध्यम से उपलब्ध विजेट्स के बारे में अधिक जानने के लिए औपचारिक Tk कमांड प्रलेखन एक उपयोगी संसाधन है।
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
के लिए टेक्स्ट मान खाली छोड़ दिया गया है क्योंकि यह हर बार उपयोगकर्ता द्वारा चयनित टाइमज़ोन के लिए "प्राप्त" होने पर गतिशील रूप से सेट किया जाएगा।
चरण 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)
जब उपयोगकर्ता चरण 5 में बनाए गए select_timezone_button
बटन पर क्लिक करता है, तो ईवेंट को संभालने के लिए कॉलबैक विधि को परिभाषित करने की आवश्यकता होती है।
कॉलबैक लॉजिक को परिभाषित करने से पहले, पहले बटन को विधि नाम से बाँधना मददगार होता है जो अंततः कॉलबैक कोड को शामिल कर लेगा। 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))
बटन क्लिक घटनाओं को संभालने के लिए कॉलबैक तर्क नीचे परिभाषित किया गया है।
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
विजेट को नए टेक्स्ट मान के साथ खुद को अपडेट करने के लिए "बल" करने के लिए किया जाता है।
रूट विंडो की 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()
जब एप्लिकेशन लॉन्च किया जाता है, तो जीयूआई इस तरह दिखना चाहिए:
एप्लिकेशन का उपयोग करने के लिए, सूची बॉक्स पर क्लिक करें और टाइमज़ोन विकल्पों में स्क्रॉल करने के लिए अपने कीबोर्ड की अप/डाउन कर्सर कुंजियों का उपयोग करें। अपने चयनित समय क्षेत्र में वर्तमान समय प्रदर्शित करने के लिए गेट टाइम बटन पर क्लिक करें।
टिंकर के साथ अपना पहला पायथन जीयूआई एप्लिकेशन बनाने के लिए बधाई ! जैसा कि परिचय में उल्लेख किया गया है, यह मार्गदर्शिका आपको कुछ बुनियादी अवधारणाओं से परिचित कराने के लिए डिज़ाइन की गई थी। पहले उल्लेखित पायथन स्टैंडर्ड लाइब्रेरी प्रलेखन और टी कमांड प्रलेखन संदर्भ दो शानदार संसाधन हैं जो आपको अधिक उन्नत टिंकर सुविधाओं और कार्यक्षमता के बारे में जानने में मदद करते हैं।
टिंकर जीयूआई अनुप्रयोगों की कभी-कभी एक गैर-देशी रूप-रंग के रूप में आलोचना की जाती है। यह सच हो सकता। लेकिन टूलकिट विजेट अत्यधिक विन्यास योग्य हैं और टिंकर जीयूआई अनुप्रयोगों को किसी भी बाहरी पायथन पैकेज को स्थापित करने की आवश्यकता के बिना अपेक्षाकृत तेज़ी से बनाया जा सकता है।
औपचारिक दस्तावेज़ीकरण के अलावा, टिंकर के साथ अधिक परिष्कृत जीयूआई अनुप्रयोगों के निर्माण के बारे में जानने के लिए इंटरनेट के माध्यम से असंख्य ट्यूटोरियल उपलब्ध हैं।