【问题标题】:How to place a widget in a Canvas widget in Tkinter?如何在 Tkinter 的 Canvas 小部件中放置小部件?
【发布时间】:2010-11-02 17:30:46
【问题描述】:

我基本上希望能够使用Canvas 作为其他小部件的元容器。

我想将我的 GUI 分为左、中和中间部分。在每个部分中,我希望能够放置小部件,例如:CheckbuttonButtonLabel 等。

如何在 Canvas 小部件中放置小部件?

【问题讨论】:

    标签: python python-3.x widget tkinter-canvas


    【解决方案1】:

    您的选择取决于您真正想要实现的目标。为什么使用画布优于使用框架?

    您可以轻松地将小部​​件添加到画布,就像使用任何其他容器一样,使用包或网格或位置。当您这样做时,滚动画布时项目不会滚动,因为它们实际上不是画布的一部分。

    另一种选择是在画布上创建窗口对象。您可以使用画布的create_window 方法来执行此操作。优点是,此窗口成为画布的一部分,并将与画布上的任何其他对象一起滚动。缺点是,您唯一的选择是绝对放置,您必须明确控制小部件的大小。

    【讨论】:

    • 我决定改用 Frame 小部件。网格可以特定于框架吗(相对于主“框架”)?
    • @thenickname:我不明白你的问题。 Grid 是一个几何管理器,适用于每个小部件。您可以在主窗口、子框架、画布等中使用网格。
    • 我的印象是,如果您要将网格应用于框架,那么该框架的网格地址将是唯一的。此外,您在主网格中创建的任何框架都将受主网格中的坐标影响。这是真的吗?
    • @thenickname:不,不是真的(虽然我不完全理解你说的)。任何容器(顶层窗口、框架等)都需要几何管理器来管理其子级。每个容器的几何管理器都是不同的。因此,主窗口可以使用网格或包几何管理器,内部框架可以使用网格或包几何管理器,并且每个都有不同的“地址”。您可以在子框架的第 1 行第 1 列中放置一些内容,而在主框架的第 1 行第 1 列中放置一些不同的内容,它们将位于两个不同的位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    相关资源
    最近更新 更多