小部件不能居中

时间:2020-11-12 18:11:32

标签: python tkinter

我试图在这里制作一个警报工具,但作为一个入门者,我要克服一些困难。因此,其中之一是将我的几个小部件对准红色框的中心(top_left_fr),但我可以不知道。有帮助吗?

import time
from tkinter import *
from time import strftime
    
def time():
    string = strftime('%H:%M:%S %p')
    lbl.config(text=string)
    lbl.after(1000, time)


window = Tk()
window.geometry("700x400")
window.resizable(False, False)
window.grid_columnconfigure(0, weight=1)

top_left_fr = Frame(window, bg="red", width=500, height=250)
top_left_fr.grid(row=0, column=0, sticky=W + E + N + S, columnspan=5)

left_bottom_fr = Frame(window, bg="blue", width=500, height=150, highlightthickness=1, highlightbackground="black")
left_bottom_fr.grid(row=0, column=0, sticky=W + E + S)

right_fr = Frame(window, bg="green", width=200, height=400, highlightthickness=1, highlightbackground="black")
right_fr.grid(row=0, column=1)

time_lbl = Label(top_left_fr, text="REAL TIME", font=('calibri', 20, 'bold'))
time_lbl.grid(row=0, column=0, pady=(10, 0))

add_but = Button(top_left_fr, text="Αdd")
add_but.grid(row=3, column=3)

lbl = Label(top_left_fr, font=('calibri', 20, 'bold'),
            background='black',
            foreground='white')

lbl.grid(row=1, column=2, pady=10)
time()
window.mainloop()

1 个答案:

答案 0 :(得分:0)

需要最少代码量的解决方案是使用pack而不是grid。默认情况下,pack会将小部件置于其放置位置的中央。

您还需要调整红色框,以使其与绿色框不重叠,方法是在添加红色框时将其移除columnspan

top_left_fr.grid(row=0, column=0, sticky=W + E + N + S)
...
time_lbl.pack(side="top", fill="x")
lbl.pack(side="top", fill="x")
add_but.pack(side="top", fill="x")

如果要使用grid,则需要确保将包含窗口小部件的列配置为展开以填充所有其他空间。默认情况下,grid将使小部件在分配的空间中居中。与pack一样,添加红色框时需要删除columnspan

top_left_fr.grid(row=0, column=0, sticky=W + E + N + S)
top_left_fr.grid_columnconfigure(0, weight=1)
...
time_lbl.grid(row=0, column=0)
lbl.grid(row=1, column=0)
add_but.grid(row=2, column=0)