如何使这些页面具有两种不同的尺寸?假设我要使StartPage变大,为500 x 500,New_Card_Page变小,例如为100 x100。App.geometry(“ 200x200”)更改所有页面,这不是我想要的。
from tkinter import *
from tkinter import ttk
LARGE_FONT=('Verdana', 12)
class Index_Cards_App(Tk):
def __init__(self, *args, **kwargs):
Tk.__init__(self, *args, **kwargs)
container = 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, New_Card_Page):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(StartPage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class StartPage(Frame):
def __init__(self, parent, controller):
Frame.__init__(self, parent)
label=Label(self, text='Index Cards')
label.pack(pady=10,padx=10)
button1 = ttk.Button(self, text='Enter New Card', command=lambda: controller.show_frame(New_Card_Page))
button1.pack()
class New_Card_Page(Frame):
def __init__(self, parent, controller):
Frame.__init__(self, parent)
label=ttk.Label(self, text='Enter New Card')
label.pack(pady=10,padx=10)
button1 = ttk.Button(self, text='Back to Home', command=lambda: controller.show_frame(StartPage)).pack()
app=Index_Cards_App()
app.geometry("200x200")
app.mainloop()
如果您希望每个页面都有自己的大小,最简单的解决方案是在最初创建页面时删除grid
的使用,而是让show_frame
删除当前页面并添加新页面。
首先,创建一个属性以保存当前页面,以便可以将其删除,然后在grid
中的循环内删除对__init__
的调用。另外,由于我们不再依赖于将页面堆叠在一起,因此可以删除用于配置网格的命令。
def __init__(self, *args, **kwargs):
Tk.__init__(self, *args, **kwargs)
container = Frame(self)
container.pack(side='top', fill='both', expand=True)
self.current_frame = None
self.frames = {}
for F in (StartPage, New_Card_Page):
frame = F(container, self)
self.frames[F] = frame
self.show_frame(StartPage)
下一步,修改show_frame
以隐藏当前页面并显示新页面。由于我们不再将小部件彼此堆叠,因此pack
比grid
更简单:
def show_frame(self, cont): if self.current_frame is not None: self.current_frame.pack_forget() self.current_frame = self.frames[cont] self.current_frame.pack(fill="both", expand=True)
最后,在代码末尾删除对geometry
的调用,因为这会将窗口强制为特定大小。进行这些更改后,每个页面都会导致窗口调整大小以适合当前页面。