【问题标题】:How do I overlap widgets with the Tkinter pack geometry manager?如何使用 Tkinter 包几何管理器重叠小部件?
【发布时间】:2008-09-21 21:45:05
【问题描述】:

我想在我的窗口中放一个带有图像的Canvas,然后我想在它上面打包小部件,所以画布充当背景。

pack 管理器是否可以有两种状态:一种用于一组小部件,另一种用于另一组?

【问题讨论】:

    标签: python tkinter geometry pack


    【解决方案1】:

    您的具体问题的答案是否定的。您不能有两种状态或以其他方式在同一个父级中使用两种不同的方式打包。

    但是,我认为您想要完成的事情很简单。使用画布的内置功能创建一个作为画布一部分的图像项,然后将内容打包到画布中,就像它是一个框架一样。

    您可以通过创建带有图像的标签小部件来完成类似的事情,然后将其他小部件打包到标签中。

    使用画布的一个优点是您可以轻松地平铺图像以使用重复的背景图像填充整个画布,以便随着窗口的增长,图像将继续填充窗口(当然您可以使用足够大的原始图像图片...)

    【讨论】:

    • 我喜欢您的回答-您对所有事情都绝对正确-除了整个方法结果不可行,因为我想为其添加标签和更多画布,但我找不到任何方法使他们的背景透明。你碰巧知道什么方法吗?
    • 我不太了解这个问题,无法回答您的问题。目前尚不清楚为什么需要使任何内容透明。例如,将画布添加到画布有什么意义?你想要完成的事情很有可能是可能的,只是可能不是你想的那样。
    【解决方案2】:

    我相信 Bryan 的回答可能是最好的通用解决方案。但是,您可能还想查看place 几何管理器。 place 几何管理器可让您指定小部件的确切大小和位置...这可能很快就会变得乏味,但可以完成工作。

    【讨论】:

      【解决方案3】:

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

      如果可以接受加载附加扩展,请查看Tkzinc。来自网站,

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

      我目前正在一个 tcl 项目中使用它,并且对结果非常满意。可以使用 tcl、perl 和 python 的扩展。

      【讨论】:

      • 我现在只是在做一个学校作业,但我肯定会考虑做一些严肃的事情。感谢您的提示!
      【解决方案4】:

      如果不进出交换小部件树,我认为这不能用 Tk 干净地完成。其他工具包可以更优雅地做到这一点。

      • COM/VB/MFC 可以使用 ActiveX 控件来做到这一点 - 您可以在同一区域中隐藏/显示多个 ActiveX 控件。任何容器都可以让你通过改变孩子来做到这一点。如果您正在编写一个特定于 Windows 的程序,则可以通过这种方式完成。
      • QT 也可以让您以类似的方式执行此操作。
      • GTK 稍微难一些。

      【讨论】:

      • 我不确定您所说的“交换小部件树”是什么意思。如果您的意思是堆叠小部件并升高或降低占据相同空间的小部件,Tk 可以轻松做到这一点。也许这不是你的意思。
      • 更改容器小部件的子级并隐藏/禁用旧子级。
      • 你当然可以在一个容器中拥有多个孩子并且除了一个之外都隐藏。至少有两种支持的方法可以做到这一点 - 提高/降低或使用几何管理器忘记一个并添加另一个。网格特别擅长这一点(阅读“网格删除”)
      猜你喜欢
      • 2020-07-10
      • 1970-01-01
      • 2020-06-10
      • 2014-10-11
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多