如何在tkinter中使Frame消失和重新出现而不创建新的Frame?

0 投票
1 回答
39 浏览
提问于 2025-04-13 17:31

我正在使用 Tkinter,并且用 pack 来管理 Frame。我想让一个 Frame 在视觉上消失,但又不想删除它或者让它变得不可见。我希望下面的 Frame 能填补这个空间,之后我还想让这个隐藏的 Frame 重新出现,同时其他的 Frame 也能回到原来的位置。让我澄清一下,我试过其他的答案,但都不符合我的需求。我使用的是 Python 3.11.7。

1 个回答

2

如果你在使用 pack 这个方法,那么你可以用 pack_forget 让某个框消失。之后你可以再用 pack 让它重新出现。不过要注意,当你第二次调用 pack 的时候,要把它放回正确的位置。相比之下,grid 方法更好用,因为它能记住一个组件是怎么被放到屏幕上的。

下面是一个使用 pack 的例子:

import tkinter as tk

def toggle():
    if top_frame.winfo_viewable():
        top_frame.pack_forget()
    else:
        top_frame.pack(before=bottom_frame, fill="x")

root = tk.Tk()
root.geometry("300x300")

top_frame = tk.Frame(root, background="bisque", height=100)
bottom_frame = tk.Frame(root)
toggle_button = tk.Button(bottom_frame, text="Toggle", command=toggle)

top_frame.pack(side="top", fill="x")
bottom_frame.pack(side="bottom", fill="both", expand=True)
toggle_button.pack(side="bottom", padx=20, pady=20)

tk.mainloop()

显示顶部框的截图

隐藏顶部框的截图

撰写回答