我希望这不是重复但我无法在任何地方找到它:
我一直在使用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。
需要:帮助或指向我这样的已回答问题的链接!
答案 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()
会隐藏小部件。