如何在不使用.place的情况下临时删除(不删除和替换)Tkinter小部件?

时间:2014-10-11 18:52:58

标签: python tkinter

我希望这不是重复但我无法在任何地方找到它:

我一直在使用Tkinter进行应用程序编写(甚至还有2个游戏,但我现在使用Pygame。)

我的问题是,我该怎么做 a" .pack"然后" .unpack" (暂时删除)而不使用" .place( x = someLARGE_Number, y = anotherLARGE_Number )"

的肮脏技巧

例:     root = Tk()

root.geometry( "300x300" )
root.title( "Test" )

label1 = Label( root, text = "Hi" )
label1.place( x = 1, y = 1 )

root.mainloop()

当我删除它时。我输入类似的内容:

label1.place( x = 3333, y = 3333 )

我知道包装和拆包存在,但你不能打开已放置的物品包装,也不能使用包装正确放置物品,那么我该如何将它整理好呢?它在代码上看起来很糟糕,并且可能放置很多东西或屏幕上有时几乎看不到一次移动1。如果这是重复,请评论一些帮助,但我找不到类似的东西。

重述:

问题:清除临时删除项目的方法,不会破坏它或使用带有一对大型屏幕外数字的.place()方法。

TRIED: .place( x = LARGE, y = LARGE )那就是它.unpack需要的东西是.pack(ed)而且你不能(据我所知)的地方你想要的物品.pack。

需要:帮助或指向我这样的已回答问题的链接!

2 个答案:

答案 0 :(得分:1)

使用与{" 几何管理器"的类型相关联的.place_forget()方法。您在创建窗口小部件时已选择:

label1.place_forget()

之后,您可以再次放置它再次显示:

label1.place(x=1, y=1)

请注意,使用.place() / .place_forget()几何管理器并不总是有益的。

您也可以将.grid() / .grid_forget().pack() / .pack_forget()方法用于其他几何管理器,其中网格排列或包布局更适合您的GUI设置/配置/调整大小需求。

可以检查所有实例方法的文档字符串属性.__doc__

>>> print label.place_forget.__doc__
Unmap this widget.
>>> print label.grid_forget.__doc__
Unmap this widget.
>>> print label.pack_forget.__doc__
Unmap this widget and do not use it for the packing order.

答案 1 :(得分:-1)

您可以查询是否使用几何图形管理器( grid pack place )“映射”了小部件,然后根据需要“忘记”它:

def unmap(widget):
    result = False
    if widget and widget.winfo_exists() and widget.winfo_ismapped():
        result = True
        geom_mgr = widget.winfo_manager()
        if geom_mgr == 'grid':
            widget.grid_forget()
        elif geom_mgr == 'pack':
            widget.pack_forget()
        elif geom_mgr == 'place':
            widget.place_forget()
        else:
            result = False
    return result            

请注意,调用与映射例程不匹配的“忘记”例程不会引发异常。因此,如果您使用pack()小部件,则可以在该小部件上调用grid_forget()而不会引起错误或没有任何效果。在这种情况下,只有pack_forget()会隐藏小部件。