मैं एक वस्तु उन्मुख दृष्टिकोण की वकालत करता हूं। यह वह टेम्प्लेट है जिसकी मैं शुरुआत करता हूं:
# Use Tkinter for python 2, tkinter for python 3
import tkinter as tk
class MainApplication(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.parent = parent
<create the rest of your GUI here>
if __name__ == "__main__":
root = tk.Tk()
MainApplication(root).pack(side="top", fill="both", expand=True)
root.mainloop()
ध्यान देने योग्य महत्वपूर्ण बातें हैं:
मैं वाइल्डकार्ड आयात का उपयोग नहीं करता। मैं पैकेज को "tk" के रूप में आयात करता हूं, जिसके लिए आवश्यक है कि मैं सभी आदेशों के साथ उपसर्ग करूं tk.
। यह वैश्विक नेमस्पेस प्रदूषण को रोकता है, साथ ही यह कोड को पूरी तरह से स्पष्ट कर देता है जब आप टिंकर क्लासेस, टीटीके क्लास या अपने खुद के कुछ का उपयोग कर रहे होते हैं।
मुख्य अनुप्रयोग एक वर्ग है । यह आपको आपके सभी कॉलबैक और निजी कार्यों के लिए एक निजी नामस्थान देता है, और आमतौर पर आपके कोड को व्यवस्थित करना आसान बनाता है। एक प्रक्रियात्मक शैली में आपको शीर्ष-डाउन को कोड करना होगा, उनका उपयोग करने से पहले कार्यों को परिभाषित करना, आदि। इस पद्धति के साथ आप तब से नहीं करते हैं जब तक कि आप वास्तव में बहुत अंतिम चरण तक मुख्य विंडो नहीं बनाते हैं। मुझे tk.Frame
केवल इसलिए विरासत से पसंद है क्योंकि मैं आमतौर पर एक फ्रेम बनाकर शुरू करता हूं, लेकिन यह आवश्यक नहीं है।
यदि आपके ऐप में अतिरिक्त टॉपवेल विंडो हैं, तो मैं उनमें से प्रत्येक को एक अलग वर्ग बनाने की सलाह देता हूं tk.Toplevel
। यह आपको ऊपर बताए गए सभी समान लाभ देता है - खिड़कियां परमाणु हैं, उनके पास अपने स्वयं के नाम स्थान हैं, और कोड अच्छी तरह से व्यवस्थित है। इसके अलावा, कोड को बड़ा करने के लिए शुरू होने के बाद प्रत्येक को अपने मॉड्यूल में रखना आसान हो जाता है।
अंत में, आप अपने इंटरफ़ेस के प्रत्येक प्रमुख भाग के लिए कक्षाओं का उपयोग करने पर विचार करना चाह सकते हैं। उदाहरण के लिए, यदि आप एक टूलबार, एक नेविगेशन फलक, एक स्थिति पट्टी और एक मुख्य क्षेत्र के साथ एक ऐप बना रहे हैं, तो आप उनमें से हर एक वर्ग बना सकते हैं। इससे आपका मुख्य कोड काफी छोटा और समझने में आसान हो जाता है:
class Navbar(tk.Frame): ...
class Toolbar(tk.Frame): ...
class Statusbar(tk.Frame): ...
class Main(tk.Frame): ...
class MainApplication(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.statusbar = Statusbar(self, ...)
self.toolbar = Toolbar(self, ...)
self.navbar = Navbar(self, ...)
self.main = Main(self, ...)
self.statusbar.pack(side="bottom", fill="x")
self.toolbar.pack(side="top", fill="x")
self.navbar.pack(side="left", fill="y")
self.main.pack(side="right", fill="both", expand=True)
चूंकि उन सभी उदाहरणों में एक आम माता-पिता का हिस्सा होता है, इसलिए माता-पिता प्रभावी रूप से मॉडल-व्यू-कंट्रोलर आर्किटेक्चर का "कंट्रोलर" हिस्सा बन जाते हैं। इसलिए, उदाहरण के लिए, मुख्य विंडो कॉल करके स्थिति पट्टी पर कुछ रख सकती है self.parent.statusbar.set("Hello, world")
। यह आपको घटकों के बीच एक सरल इंटरफ़ेस को परिभाषित करने की अनुमति देता है, जिससे कपलिंग को न्यूनतम रखने में मदद मिलती है।