小部件的 tkinter 放置
tkinter placement of widgets
考虑以下简单代码:
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 拒绝做我期望的事情,最初我有 rely=1.0 作为它的放置命令,我期望它的 N(顶部中心边缘)被放置在底部的水平中点(1.0*高度) 的绿色框架,我已将其设置为它的父级并用作 .place() 命令 _in 参数。
无论我用于实例化 frameB 的 root 参数还是上述 in_ 参数,frameB 的依赖似乎一直放在 w.r.t 大型机或 root 上。
我知道我可以使用 .pack(),但我正在尝试了解 .place() 的行为,所以请不要让我既不使用 .pack() 也不使用 .grid()。
我做错了什么?或(更糟)误解 ?
pack()
、grid()
、place()
returnNone
,因此赋值frameA = Frame(bla bla).place(bla)
,就是赋值None
至 frameA
您需要分两步完成此操作才能获得所需内容:
- 首先创建小部件。
- 第二名。
大致如下:
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)
考虑以下简单代码:
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 拒绝做我期望的事情,最初我有 rely=1.0 作为它的放置命令,我期望它的 N(顶部中心边缘)被放置在底部的水平中点(1.0*高度) 的绿色框架,我已将其设置为它的父级并用作 .place() 命令 _in 参数。
无论我用于实例化 frameB 的 root 参数还是上述 in_ 参数,frameB 的依赖似乎一直放在 w.r.t 大型机或 root 上。
我知道我可以使用 .pack(),但我正在尝试了解 .place() 的行为,所以请不要让我既不使用 .pack() 也不使用 .grid()。
我做错了什么?或(更糟)误解 ?
pack()
、grid()
、place()
returnNone
,因此赋值frameA = Frame(bla bla).place(bla)
,就是赋值None
至 frameA
您需要分两步完成此操作才能获得所需内容:
- 首先创建小部件。
- 第二名。
大致如下:
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)