একটি উপায় হ'ল একে অপরের উপরে ফ্রেমগুলি স্ট্যাক করা, তারপরে আপনি কেবল স্ট্যাকিং ক্রমে একে অপরের উপরে তুলতে পারেন। শীর্ষে থাকা একটি দৃশ্যমান। এটি সবথেকে ভাল কাজ করে যদি সমস্ত ফ্রেম একই আকারের হয় তবে সামান্য কাজ দিয়ে আপনি এটি কোনও আকারের ফ্রেমগুলির সাথে কাজ করতে পারেন।
বিঃদ্রঃ : এটি কাজ করার জন্য, কোনও পৃষ্ঠার সমস্ত উইজেটের অবশ্যই পাতাগুলি (অর্থাত্ self
) : বা পিতা বা মাতা হিসাবে কোনও বংশধর থাকতে হবে (বা মাস্টার, আপনি যে পরিভাষা পছন্দ করেন তার উপর নির্ভর করে)।
আপনাকে সাধারণ ধারণাটি দেখানোর জন্য এখানে কিছুটা নিস্পষ্ট উদাহরণ রয়েছে:
try:
import tkinter as tk
from tkinter import font as tkfont
except ImportError:
import Tkinter as tk
import tkFont as tkfont
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")
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
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")
সময়ের সাথে সাথে লোকেরা এই কোডটি (বা একটি অনলাইন টিউটোরিয়াল যা এই কোডটি অনুলিপি করেছে) একটি প্রাথমিক পয়েন্ট হিসাবে ব্যবহার করে অন্যান্য প্রশ্ন জিজ্ঞাসা করেছে। আপনি এই প্রশ্নের উত্তরগুলি পড়তে চাইতে পারেন: