如何为每个页面设置不同的窗口(几何)大小?

时间:2018-03-14 07:25:26

标签: python tkinter resize

我使用 Frame小部件创建了两个页面。

  1. 我希望第一页的几何尺寸为:"900x650+220+20"
  2. 以及几何尺寸为"1000x800+220+20"的第二页。
  3. 有可能吗?

    from Tkinter import *
    def swap_frame(frame):
        frame.tkraise()
    
    root = Tk()
    root.geometry("900x650+220+20")
    root.title("Testing")
    root.configure(borderwidth="1", relief="sunken",cursor="arrow",background="#BCC3B9",highlightcolor="black")
    root.resizable(width=False, height=False)
    
    frame2 = Frame(root, width=900, height=650)
    frame1 = Frame(root, width=900, height=650)
    
    
    #item 1 spinbox
    Platform = Spinbox(frame1, values=("SX-16F", "SX-12VP", "SX-16VP", "VSRM-A", "NRNT-A", "FX-8", "DX-48V"), width="32")
    Platform.place(x=500, y=200, relheight=0.05)
    
    Button1=Button(frame1, text="Next", width =10, height= 2, bg= "#dbd8d7", command=lambda:swap_frame(frame2))
    Button1.place(x=580, y=580)
    
    Button3=Button(frame2, text="Back", width =10, height= 2, bg= "#dbd8d7", command=lambda:swap_frame(frame1))
    Button3.place(x=580, y=580)
    
    frame2.grid(row=0, column=0)
    frame1.grid(row=0, column=0)
    
    root.mainloop()
    

1 个答案:

答案 0 :(得分:1)

geometry方法的master上使用swap_frame方法调用框架:

frame.master.geometry("900x650+220+20")

或更一般地说:

widget.winfo_toplevel().geometry("100x250+220+20")

如果您希望每个框架都有不同的展示位置/尺寸,可以采取多种方式:

  1. 收集集合类型中的框架小部件,例如 dict离子或list,然后使用基于映射的geometry调用 在框架上
  2. 明确传递映射值,然后根据该值调用geometry 映射当前框架
  3. 为每个帧定义属性以进行映射或几何 直接参数,只需使用该参数调用geometry 对于当前框架
  4. 以下示例使用3中建议的属性:

    def resize(widget):
        widget.winfo_toplevel().geometry(widget.geo)
    
    
    def swap_frame(frame):
        resize(frame)
        frame.tkraise()
    ...
    frame1.geo = "900x650+220+20"
    frame2.geo = "1000x800+220+20"