दिलचस्प पोस्ट
ब्लूटूथ हेडसेट के साथ Android RecognizerIntent का उपयोग करना आप jQuery के डिफरेड्स की एक सरणी के साथ कैसे काम करते हैं? क्लीनअप PHP सत्र फ़ाइलें पॉपअप अवरोधन के बिना नई विंडो में पृष्ठ खोलें कैसे एक बंद (परिपत्र) ListView बनाने के लिए? Maven2: एंटरप्राइज़ प्रोजेक्ट (ईएआर फ़ाइल) के लिए सर्वश्रेष्ठ अभ्यास मैं ggplot2 के दाईं ओर एक परिवर्तनशील पैमाने कैसे लगा सकता हूं? 'का प्रयोग' वक्तव्य बनाम 'अंत में प्रयास करें' एसक्यूएल में शीर्ष और सीमा खोजशब्द के बीच अंतर स्प्रिंग कॉन्फ़िगरेशन XML स्कीमा: संस्करण के साथ या बिना? मैं jQuery में एकाधिक वर्गों के साथ एक तत्व कैसे चुन सकता हूं? नया पूर्णांक बनाम मानऑफ़ चींटी के साथ एक बंडल जार बनाना आप एक int को C ++ स्ट्रिंग कैसे परिवर्तित करते हैं? मैं किसी अन्य के मूल्यों के आधार पर एक वेक्टर को किस प्रकार सॉर्ट करूँ?

टंकिनर में दो फ़्रेम के बीच स्विच करें

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

यदि आपके पास 'प्रारंभ मेनू' के साथ कुछ है, तो आपके खोलने वाली स्क्रीन के लिए, और उपयोगकर्ता चयन के साथ आप प्रोग्राम के एक अलग सेक्शन में जाते हैं और स्क्रीन को ठीक से रेखांकित करते हैं, ऐसा करने का शानदार तरीका क्या है?

क्या किसी को सिर्फ ' .destroy() ' .destroy() 'स्टार्ट मेन्यू' फ़्रेम और फिर एक अन्य भाग के लिए विगेट्स से भरने वाला नया बनाएं? और इस प्रक्रिया को उल्टा करते हैं जब वे वापस बटन दबाते हैं?

वेब के समाधान से एकत्रित समाधान "टंकिनर में दो फ़्रेम के बीच स्विच करें"

एक तरफ एक दूसरे के ऊपर तख्ते ढेर करना है, फिर आप स्टैकिंग ऑर्डर में दूसरे से ऊपर एक उठा सकते हैं। शीर्ष पर एक होगा जो दिखाई दे रहा है। यह सबसे अच्छा काम करता है अगर सभी फ़्रेम एक ही आकार के होते हैं, लेकिन थोड़ी सी काम के साथ आप इसे किसी भी आकार के फ्रेम के साथ काम कर सकते हैं

आपको सामान्य अवधारणा दिखाने के लिए यहां एक उदाहरण का थोड़ा सा है:

 import tkinter as tk # python 3 from tkinter import font as tkfont # python 3 #import Tkinter as tk # python 2 #import tkFont as tkfont # python 2 class SampleApp(tk.Tk): def __init__(self, *args, **kwargs): tk.Tk.__init__(self, *args, **kwargs) self.title_font = tkfont.Font(family='Helvetica', size=18, weight="bold", slant="italic") # the container is where we'll stack a bunch of frames # on top of each other, then the one we want visible # will be raised above the others container = tk.Frame(self) container.pack(side="top", fill="both", expand=True) container.grid_rowconfigure(0, weight=1) container.grid_columnconfigure(0, weight=1) self.frames = {} for F in (StartPage, PageOne, PageTwo): page_name = F.__name__ frame = F(parent=container, controller=self) self.frames[page_name] = frame # put all of the pages in the same location; # the one on the top of the stacking order # will be the one that is visible. frame.grid(row=0, column=0, sticky="nsew") self.show_frame("StartPage") def show_frame(self, page_name): '''Show a frame for the given page name''' frame = self.frames[page_name] frame.tkraise() class StartPage(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) self.controller = controller label = tk.Label(self, text="This is the start page", font=controller.title_font) label.pack(side="top", fill="x", pady=10) button1 = tk.Button(self, text="Go to Page One", command=lambda: controller.show_frame("PageOne")) button2 = tk.Button(self, text="Go to Page Two", command=lambda: controller.show_frame("PageTwo")) button1.pack() button2.pack() class PageOne(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) self.controller = controller label = tk.Label(self, text="This is page 1", font=controller.title_font) label.pack(side="top", fill="x", pady=10) button = tk.Button(self, text="Go to the start page", command=lambda: controller.show_frame("StartPage")) button.pack() class PageTwo(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) self.controller = controller label = tk.Label(self, text="This is page 2", font=controller.title_font) label.pack(side="top", fill="x", pady=10) button = tk.Button(self, text="Go to the start page", command=lambda: controller.show_frame("StartPage")) button.pack() if __name__ == "__main__": app = SampleApp() app.mainloop() 

यदि आपको भ्रामक वर्ग में उदाहरण बनाने की अवधारणा मिलती है, या यदि निर्माण के दौरान अलग-अलग पृष्ठों को अलग-अलग तर्कों की आवश्यकता होती है, तो आप स्पष्ट रूप से प्रत्येक श्रेणी को अलग से कॉल कर सकते हैं। लूप मुख्य रूप से यह इंगित करने के लिए कार्य करता है कि प्रत्येक वर्ग समान है।

उदाहरण के लिए, अलग-अलग कक्षाएं बनाने के लिए आप इस लूप को हटा सकते हैं for F in (StartPage, ...) साथ:

 self.frames["StartPage"] = StartPage(parent=container, controller=self) self.frames["PageOne"] = PageOne(parent=container, controller=self) self.frames["PageTwo"] = PageTwo(parent=container, controller=self) self.frames["StartPage"].grid(row=0, column=0, sticky="nsew") self.frames["PageOne"].grid(row=0, column=0, sticky="nsew") self.frames["PageTwo"].grid(row=0, column=0, sticky="nsew") 

समय के साथ लोगों ने इस कोड (या एक ऑनलाइन ट्यूटोरियल जो इस कोड की प्रतिलिपि बनाई है) का इस्तेमाल करते हुए अन्य प्रश्न पूछे हैं, आप इन सवालों के उत्तर पढ़ना चाह सकते हैं:

  • Tkinter __init__ में माता पिता और नियंत्रक को समझना
  • Tkinter! फ़्रेमों को कैसे स्विच करें, समझना
  • कक्षा से चर डेटा कैसे प्राप्त करें
  • टंकिनर अजगर 3 में विभिन्न वर्गों से चर तक कैसे पहुंचें
  • मैं एक विधि कैसे बनाऊँगा जो हर बार एक फ्रेम को टंकिनर में दिखाया जाता है
  • Tkinter फ़्रेम आकार बदलें
  • Py2.7: टंकिनर को अलग-अलग फाइलों में पृष्ठों के लिए कोड है

यहां एक और सरल जवाब है, लेकिन कक्षाओं का उपयोग किए बिना।

 from tkinter import * def raise_frame(frame): frame.tkraise() root = Tk() f1 = Frame(root) f2 = Frame(root) f3 = Frame(root) f4 = Frame(root) for frame in (f1, f2, f3, f4): frame.grid(row=0, column=0, sticky='news') Button(f1, text='Go to frame 2', command=lambda:raise_frame(f2)).pack() Label(f1, text='FRAME 1').pack() Label(f2, text='FRAME 2').pack() Button(f2, text='Go to frame 3', command=lambda:raise_frame(f3)).pack() Label(f3, text='FRAME 3').pack(side='left') Button(f3, text='Go to frame 4', command=lambda:raise_frame(f4)).pack(side='left') Label(f4, text='FRAME 4').pack() Button(f4, text='Goto to frame 1', command=lambda:raise_frame(f1)).pack() raise_frame(f1) root.mainloop()