如何使用Tkinter的pack几何管理器重叠小部件?

2 投票
4 回答
3394 浏览
提问于 2025-04-11 09:25

我想在我的窗口里放一个带图片的Canvas,然后在它上面放一些小部件,这样Canvas就可以当作背景。

请问pack管理器能不能有两种状态:一种状态放一组小部件,另一种状态放另一组小部件?

4 个回答

1

... 结果发现这个方法行不通,因为我想添加标签和更多的画布,但我找不到任何方法让它们的背景变透明。

如果可以加载一个额外的扩展,可以看看 Tkzinc。根据网站上的介绍,

Tkzinc(历史上叫做Zinc)这个小工具和Tk Canvas非常相似,它们都支持结构化图形。像Canvas一样,Tkzinc也实现了用于显示图形实体的项目。这些项目可以被操作,并且可以与它们关联一些绑定,以实现交互行为。但与Canvas不同的是,Tkzinc可以将项目结构化为一个层次,支持缩放和旋转,还可以为项目层次的子树设置剪裁,支持多轮廓曲线。它还借助OpenGL提供了高级渲染功能,比如颜色渐变、抗锯齿、透明度和三角形项目。

我目前在一个tcl项目中使用它,结果让我很满意。tcl、perl和python都有相关的扩展可用。

1

我觉得Bryan的回答可能是最好的通用解决方案。不过,你也可以看看这个叫做 place 的布局管理器。这个place布局管理器让你可以精确地指定小部件的大小和位置……虽然这样做可能会很麻烦,但确实能完成任务。

2

针对你具体的问题,答案是否定的。你不能在同一个父容器里同时使用两种不同的状态或方式来放置元素。

不过,我觉得你想要实现的目标其实很简单。你可以利用画布的内置功能,创建一个图像项,让它成为画布的一部分,然后像对待框架一样,把其他东西放到画布里。

你也可以通过创建一个带有图像的标签小部件来实现类似的效果,然后把其他小部件放到这个标签里。

使用画布的一个好处是,你可以轻松地把一张图片铺满整个画布,作为重复的背景图像,这样当窗口变大时,图片会继续填满窗口(当然,你也可以直接使用一张足够大的原始图片……)

撰写回答