0

考虑以下简单代码:

    from tkinter import *

    mainFrame = Frame(parent, bd=5, bg="yellow").pack(expand=True,fill=BOTH)

    frameA = Frame(mainFrame, bd=5, bg="green").place(anchor=NW, relx=0, rely=0 , relwidth=1.0, height=40)
    my_label = Label(mainFrame, text="Hello world ", bg="red").place(in_=frameA, relx=0, anchor=NW, rely=0, relwidth=0.5)

    frameB = Frame(frameA, bd=5, bg="gold").place(in_=frameA , anchor=N, relx=0.5, rely=0.8, width=30, height=50)

结果如下所示: 在此处输入图像描述

黄色框架是有道理的,是我所期望的。frameA(绿色)和 my_label 也是如此。

但是,frameB 拒绝做我期望的事情,最初我已经为它的 place 命令依赖 = 1.0 并且我期望它的 N(顶部中心边缘)被放置在绿色框架底部的水平中点(1.0 * 高度)我已将其设置为它的父级并用作它的 .place() 命令 _in 参数。

无论我用于实例化 frameB 的 root 参数或所述 in_ 参数如何,frameB 的依赖似乎一直被放置在大型机或 root 中。

我知道我可以使用 .pack(),但我正试图弄清楚 .place() 的行为,所以请不要让我既不使用 .pack() 也不使用 .grid()。

我究竟做错了什么?还是(更糟糕的)误解?

4

1 回答 1

2

pack(), grid(), 和place()return None,因此,分配frameA = Frame(bla bla).place(bla),正在分配NoneframeA

您需要分两步执行此操作才能获得所需的内容:

  • 首先创建小部件。
  • 排在第二位。

这些方面的东西:

mainFrame = Frame(parent, bd=5, bg="yellow")
mainFrame.pack(expand=True,fill=BOTH)

frameA = Frame(mainFrame, bd=5, bg="green")
frameA.place(anchor=NW, relx=0, rely=0 , relwidth=1.0, height=40)

my_label = Label(mainFrame, text="Hello world ", bg="red")
my_label.place(in_=frameA, relx=0, anchor=NW, rely=0, relwidth=0.5)

frameB = Frame(frameA, bd=5, bg="gold")
frameB.place(in_=frameA , anchor=N, relx=0.5, rely=0.8, width=30, height=50)
于 2017-10-02T10:56:51.463 回答