如何固定“标签在框架中的位置”

时间:2019-01-10 00:18:52

标签: python tkinter

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

我可以将粉红色标签放在黄色框中,但其他两个棕色标签不在我想要放置的位置。

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()

Image

3 个答案:

答案 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()