为什么删除grid()使我的程序变成空白?



我在我的tkinter程序中使用.place(),所以我想删除对grid()的引用。到目前为止,我的程序工作,但由于某种原因,有一个单一的.grid()行,使我的整个程序变成空白,如果它被删除。这不应该发生,因为我完全使用.place()。下面是这一行:

AllFrames.grid(row=0, column=0, sticky='nsew')

这里是我的完整代码:

from tkinter import *
root = Tk()
root.title("Account Signup")
DarkBlue = "#2460A7"
LightBlue = "#B3C7D6"
root.geometry('350x230')
Menu = Frame()
loginPage = Frame()
registerPage = Frame()
for AllFrames in (Menu, loginPage, registerPage):
AllFrames.grid(row=0, column=0, sticky='nsew')
AllFrames.configure(bg=LightBlue)
def show_frame(frame):
frame.tkraise()
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
show_frame(Menu)
# ============= Menu Page =========
menuTitle = Label(Menu, text="Menu", font=("Arial", 25), bg=LightBlue)
menuTitle.place(x=130, y=25)
loginButton1 = Button(Menu, width=25, text="Login", command=lambda: show_frame(loginPage))
loginButton1.place(x=85, y=85)
registerButton1 = Button(Menu, width=25, text="Register", command=lambda: show_frame(registerPage))
registerButton1.place(x=85, y=115)
# ======== Login Page ===========
loginUsernameL = Label(loginPage, text='Username').place(x=30, y=60)
loginUsernameE = Entry(loginPage).place(x=120, y=60)
loginPasswordL = Label(loginPage, text='Password').place(x=30, y=90)
loginPasswordE = Entry(loginPage).place(x=120, y=90)
backButton = Button(loginPage, text='Back', command=lambda: show_frame(Menu)).place(x=0, y=0)
loginButton = Button(loginPage, text='Login', width=20).place(x=100, y=150)
# ======== Register Page ===========

root.mainloop()

我还注意到,改变括号中的任何内容都会导致相同的结果。例如,如果我将sticky='nsew'更改为sticky='n'或将row=0更改为row=1,它将显示空白页面。我如何从我的程序中删除.grid()而不变成空白?

place()管理器不保留任何空间,除非您直接告诉它。

grid(sticky='nsew')使小部件扩展以填充整个可用空间,在本例中是包含小部件。里面的小部件都使用place(),不会占用任何空间。当您更改为grid(sticky='n')时,您将零大小小部件放在包含小部件的顶部。

但是,对于你当前的问题,你可以为小部件指定一个大小:

AllFrames.place(relwidth=1, relheight=1) # w/h relative to size of master

我建议使用grid()几何图形管理器,如果你要做任何更复杂的布局。

更多信息请查看archive.org上的effbot

最新更新