2013-02-11 8 views
15

मेरे पास यहां एक साधारण सवाल है। टिंकर (पायथन) में, मैं सोच रहा था कि मेरे आवेदन के विभिन्न पृष्ठों पर जाने के लिए बटन का उपयोग किस प्रकार करना है, उदाहरण के लिए एक रजिस्टर पेज और एक लॉगिन पेज। मुझे पता है कि जीयूआई के पास वेबसाइटों की तरह 'पेज' नहीं हैं, मैंने कुछ अलग तरीकों को देखा है, लेकिन विभिन्न पृष्ठों के लिंक बनाने का सबसे अच्छा तरीका क्या है?आवेदन के विभिन्न पृष्ठों पर नेविगेट करने के लिए टिंकर में बटन का उपयोग करना?

आपको बहुत बहुत धन्यवाद!

उत्तर

17

प्रत्येक पृष्ठ को एक फ्रेम बनाएं। फिर, आपके सभी बटनों को जो कुछ भी दिखाना है उसे छुपाएं, फिर वांछित फ्रेम को दृश्यमान बनाएं।

ऐसा करने का एक आसान तरीका फ्रेम को एक दूसरे के शीर्ष पर ढेर करना है (यह एक समय है जब place समझ में आता है) और फिर, lift() वह फ्रेम जिसे आप दिखाना चाहते हैं। यह तकनीक सर्वोत्तम काम करती है जब सभी पृष्ठ एक ही आकार के होते हैं; वास्तव में, यह आवश्यक है कि आप स्पष्ट रूप से फ्रेम युक्त आकार निर्धारित करें।

निम्नलिखित एक प्रदूषित उदाहरण है। समस्या को हल करने का यह एकमात्र तरीका नहीं है, केवल यह प्रमाण है कि हल करने के लिए यह विशेष रूप से कठिन समस्या नहीं है:

import Tkinter as tk 

class Page(tk.Frame): 
    def __init__(self, *args, **kwargs): 
     tk.Frame.__init__(self, *args, **kwargs) 
    def show(self): 
     self.lift() 

class Page1(Page): 
    def __init__(self, *args, **kwargs): 
     Page.__init__(self, *args, **kwargs) 
     label = tk.Label(self, text="This is page 1") 
     label.pack(side="top", fill="both", expand=True) 

class Page2(Page): 
    def __init__(self, *args, **kwargs): 
     Page.__init__(self, *args, **kwargs) 
     label = tk.Label(self, text="This is page 2") 
     label.pack(side="top", fill="both", expand=True) 

class Page3(Page): 
    def __init__(self, *args, **kwargs): 
     Page.__init__(self, *args, **kwargs) 
     label = tk.Label(self, text="This is page 3") 
     label.pack(side="top", fill="both", expand=True) 

class MainView(tk.Frame): 
    def __init__(self, *args, **kwargs): 
     tk.Frame.__init__(self, *args, **kwargs) 
     p1 = Page1(self) 
     p2 = Page2(self) 
     p3 = Page3(self) 

     buttonframe = tk.Frame(self) 
     container = tk.Frame(self) 
     buttonframe.pack(side="top", fill="x", expand=False) 
     container.pack(side="top", fill="both", expand=True) 

     p1.place(in_=container, x=0, y=0, relwidth=1, relheight=1) 
     p2.place(in_=container, x=0, y=0, relwidth=1, relheight=1) 
     p3.place(in_=container, x=0, y=0, relwidth=1, relheight=1) 

     b1 = tk.Button(buttonframe, text="Page 1", command=p1.lift) 
     b2 = tk.Button(buttonframe, text="Page 2", command=p2.lift) 
     b3 = tk.Button(buttonframe, text="Page 3", command=p3.lift) 

     b1.pack(side="left") 
     b2.pack(side="left") 
     b3.pack(side="left") 

     p1.show() 

if __name__ == "__main__": 
    root = tk.Tk() 
    main = MainView(root) 
    main.pack(side="top", fill="both", expand=True) 
    root.wm_geometry("400x400") 
    root.mainloop() 
+0

आपके मुकाबले बहुत कुछ ठीक है, ठीक उसी के बाद मैं क्या कर रहा था! –

+0

@CasparWylie: यह सब उदाहरण का अर्थ यह है कि यह पूरा उदाहरण टेक्स्ट का एक ब्लॉक है। आप इसे जितनी चाहें उतनी फाइलों में विभाजित कर सकते हैं - इसका समाधान के साथ कुछ लेना देना नहीं है। प्रत्येक "पृष्ठ" आसानी से अपना मॉड्यूल हो सकता है। –

+0

@ ब्रायन ओक्ले, क्या इस तरह की चीजों के लिए नोटबुक का उपयोग करना बेहतर नहीं होगा? http://www.tkdocs.com/tutorial/complex.html#notebook – user3885927

संबंधित मुद्दे

 संबंधित मुद्दे