tkinter:使用 pack_forget 然后再次使用 pack() ,它会打包到不同的位置

hir*_*hme 3 python tkinter

根据我的理解,使用 pack() 管理器,每个帧都会相对于代码中其他帧的位置放置。所以如果我这样做:

frame1 = tk.Frame(root)
frame1.pack()

frame2 = tk.Frame(root)
frame2.pack()

frame3 = tk.Frame(root)
frame3.pack()
Run Code Online (Sandbox Code Playgroud)

然后frame2将出现在下方/之后frame1和之前frame3

我的问题是,当使用该功能时frame2.pack_forget(),每当我再次这样做时,frame2.pack()顺序都不会恢复,但现在我有frame1,,,,好像是最后一个。frame3frame2frame2pack

我如何使用pack_forget()然后pack()在创建它的完全相同的位置?

Bry*_*ley 7

如何在创建它的完全相同的位置使用 pack_forget() 然后使用 pack() ?

从广义上讲,你不能。其本质pack是将小部件放置在可用空间的边缘。当您添加和删除小部件时,可用空间会发生变化。当您调用 时pack_forget,tkinter 会忘记小部件在哪里。

话虽这么说,pack有一些选项可以帮助解决这个问题。您可以使用beforeafter选项将小部件插入到包装顺序中的其他小部件之前或之后。由您来记住顺序。例如,您可以frame2.pack(before=frame3)将其插入之前frame3

如果您想动态隐藏和删除小部件,grid通常是更好的选择,因为grid_removegrid记住小部件的位置。