如何将两个棕色标签分别放入蓝色框和绿色框?
我可以将粉红色标签放在黄色框中,但其他两个棕色标签不在我想要放置的位置。
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').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').pack(side='left')
subFramel = tk.Frame(frameShow, bg='green', width=200,height=200).pack()
label3 = tk.Label(subFramel, text='Inside the green frame',
bg='brown', fg='white').pack(side='right')
subFrame2 = tk.Frame(frameShow, bg='blue',
width=180,height=200).pack(side='left')
label3 = tk.Label(subFrame2, text='Inside the blue frame',
bg='brown', fg='white').pack()
window.mainloop()
答案 0 :(得分:0)
代码中的主要问题是,当变量应为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()
答案 1 :(得分:-1)
您可以使事情更简单并使用:
label2.place(x = {positionInPixels), y = {positionInPixels))
反复试验的过程,但是简单得多。希望这会有所帮助!
答案 2 :(得分:-1)
您可以使用.pack()
而不是.grid()
来制作框架,我认为这样可以使工作变得更加容易。它的功能与pack基本相同,但是您可以指定框架在网格中的位置。您可以为每个要占用的帧指定列(column=0, row=0
,并指定要占用的帧数(空白和黄色帧需要rowspan=2
)。
此后,您只需将标签.pack("left")
插入所需的帧中即可。
({.pack_propagate(False)
必须在框架上调用,以防止它们在放入标签时缩小。)
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()