2016-12-05 94 views
0

我在这里使用代码:Switch between two frames in tkinter作为我的代码的基本框架,现在我有多个框架。我想知道是否可以根据显示的帧大小调整窗口大小。例如,我的初始页面可能是一个小而可爱的300x300窗口,只是显示一个按钮列表,但一旦点击进入另一个页面,窗口就会变为500x500.tkinter中多个窗口的多个窗口大小

在此先感谢!

+0

检查此问题http://stackoverflow.com/questions/35991126/tkinter-frame-resize。 –

回答

0

这里是接受的答案Switch between two frames in tkinter的修改版本。我修改了show_frame方法,以便它也改变窗口的几何形状。

import tkinter as tk # python3 
#import Tkinter as tk # python 

TITLE_FONT = ("Helvetica", 18, "bold") 

class SampleApp(tk.Tk): 

    def __init__(self, *args, **kwargs): 
     tk.Tk.__init__(self, *args, **kwargs) 

     # 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,geometry in zip((StartPage, PageOne, PageTwo), ('300x300', '500x500', '800x500')): 
      page_name = F.__name__ 
      frame = F(parent=container, controller=self) 
      # store the frame and the geometry for this frame 
      self.frames[page_name] = (frame, geometry) 

      # 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, geometry = self.frames[page_name] 
     # change geometry of the window 
     self.update_idletasks() 
     self.geometry(geometry) 
     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=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=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=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()