Python 如何修复&x2018;标签';s在框架中的位置”;

Python 如何修复&x2018;标签';s在框架中的位置”;,python,tkinter,Python,Tkinter,如何将两个棕色标签分别放入蓝色框和绿色框中 我可以把粉红色的标签放在黄色的框中,但是另外两个棕色的标签不在我想放的位置 将tkinter作为tk导入 window=tk.tk() window.title('框架测试') 窗口几何体('600x450') label1=tk.Label(窗口,文本=,在窗口的左侧,'bg='red', fg='白色')。包装(侧面='左侧〕 frameShow=tk.Frame(窗口,背景为黄色,宽度为100,高度为50) frameShow.pack() la

如何将两个棕色标签分别放入蓝色框和绿色框中

我可以把粉红色的标签放在黄色的框中,但是另外两个棕色的标签不在我想放的位置

将tkinter作为tk导入
window=tk.tk()
window.title('框架测试')
窗口几何体('600x450')
label1=tk.Label(窗口,文本=,在窗口的左侧,'bg='red',
fg='白色')。包装(侧面='左侧〕
frameShow=tk.Frame(窗口,背景为黄色,宽度为100,高度为50)
frameShow.pack()
label2=tk.Label(frameShow,text='在黄色框架的左侧',
bg='粉色')。包装(侧边='左侧〕
子框架=tk.Frame(frameShow,bg='green',宽度=200,高度=200).pack()
label3=tk.Label(子框架,text='在绿色框架内',
背景class='棕色',前景class='白色').pack(侧面class='右侧')
子帧2=tk.Frame(frameShow,bg='blue',
宽度=180,高度=200)。包装(侧面=左侧)
label3=tk.Label(子框架2,text='在蓝色框架内',
bg='brown',fg='white').pack()
window.mainloop()

您只需将事情简化并使用:

label2.place(x = {positionInPixels), y = {positionInPixels))

尝试和错误的过程,但要简单得多。希望这有帮助

代码中的主要问题是将变量设置为
subFrame=tk.Frame(…).pack()
当变量应该是
subFrame=tk.Frame(…)
时,下面的代码应该可以工作。我包含了borderwidth=2,这样您就可以看到框架颜色,因为框架会自动收缩到框架内容

import tkinter as tk
window = tk.Tk()
window.title('frame test')
window.geometry('600x450')

label1 = tk.Label(window, text='In the left side of window', bg='red', fg='white')
label1.pack(side='left')

frameShow = tk.Frame(window, bg='yellow', width=100,height=50)
frameShow.pack()

label2 = tk.Label(frameShow, text='In the left side of yellow frame', bg='pink')
label2.pack(side='left')

subFramel = tk.Frame(frameShow, bg='green', width=200,height=200, borderwidth=2)
subFramel.pack()

label3 = tk.Label(subFramel, text='Inside the green frame', bg='brown', fg='white')
label3.pack(side='right')

subFrame2 = tk.Frame(frameShow, bg='blue', width=180,height=200, borderwidth=2)
subFrame2.pack(side='left')

label3 = tk.Label(subFrame2, text='Inside the blue frame',bg='brown', fg='white', borderwidth=2)
label3.pack()

window.mainloop()

您可以使用
.pack()
而不是
.grid()
作为框架,我认为这会使您的工作更加轻松。它的功能基本上与pack相同,但可以指定帧在网格中的位置。您为每一个框架指定要占用的列(<代码>列=0,行=0 < /COD>),以及每个它应该占用多少个(<代码> ROWSPAN=2 < /代码>空白和黄色帧)。< /P> 在此之后,您只需将标签
.pack(“left”)
放入所需的框架中即可

.pack\u propagate(False)
必须在帧上调用,以在放入标签时阻止帧收缩。)


谢谢你的帮助,这是我想要的。但是我想知道这行末尾的
.pack()
与在下一行创建的
label2.pack(side='left')
之间有什么不同?当您将变量设置为
label2=tk.Label()
时,label2变量就是一个Label对象。另一方面,如果设置变量
label2=tk.Label().pack()
,则label2变量将是pack方法的输出,即None。您可以通过打印变量的类型进行检查<代码>打印(类型(标签2))
import tkinter as tk

window = tk.Tk()
window.title('Frame Test')
window.geometry('600x600')

blank_frame = tk.Frame(window, width=200,height=600)
blank_frame.pack_propagate(False) 
blank_frame.grid(column=0, row=0, rowspan=2)

yellow_frame = tk.Frame(window, bg='yellow', width=200,height=600)
yellow_frame.pack_propagate(False) # stops label shrinking when it gets a label in it
yellow_frame.grid(column=1, row=0, rowspan=2)

green_frame = tk.Frame(window, bg='green', width=200,height=300)
green_frame.pack_propagate(False)
green_frame.grid(column=2, row=0)

blue_frame = tk.Frame(window, bg='blue', width=200,height=300)
blue_frame.pack_propagate(False)
blue_frame.grid(column=2, row=1)


yellow_label = tk.Label(yellow_frame, text='In the left side of yellow frame',  bg='pink')
yellow_label.pack(side='left')

green_label = tk.Label(green_frame, text='Inside the green frame',  bg='brown')
green_label.pack(side='left')

green_label = tk.Label(blue_frame, text='Inside the blue frame',  bg='brown')
green_label.pack(side='left')

left_side_label = tk.Label(blank_frame, text='In the left side of the window',  bg='red')
left_side_label.pack(side='left')

window.mainloop()