Python Tkinter frame newby 几何问题?

Python Tkinter frame newby geometry problem?

我是 tkinter 和 python 的新手。这就是我的代码的样子:

import tkinter as tk

main = tk.Tk()
# Window size
main.geometry("400x700")
main.resizable(0, 0)

# Window position
w = main.winfo_reqwidth()
h = main.winfo_reqheight()
ws = main.winfo_screenwidth()
hs = main.winfo_screenheight()
x = (ws/2) - (w/2)
y = (hs/2) - (h/2)
main.geometry('+%d+%d' % (x, y))

fr1 = tk.Frame(main, borderwidth=2, relief="solid", bg = "#271ee3", width=400, height=50)
fr2 = tk.Frame(main, borderwidth=2, relief="solid", bg = "#0d9467", width=200, height=650)
fr3 = tk.Frame(main, borderwidth=2, relief="solid", bg = "#3e1854", width=200, height=650)

fr1.pack()
fr2.pack(side="left")
fr3.pack(side="right")

main.mainloop()

通过这段代码,我得到了 following window

到目前为止一切顺利。当我添加此代码时出现问题:

# Label
l = tk.Label(fr2, text="Heyho")
l.grid(row=0, column=0)

现在看起来so

我的目标是获得一个 window 我在第一帧 (fr1) 中有一个与 fr1 具有相同几何形状的按钮。在 fr2 和 fr3 中,我希望彼此之间有严格的标签。我在 fr2 和 fr3 中的标签应该有第 0 列,但行是升序的 (0,1,2,3...)。我该怎么做?

它会自动将 Frame 的大小调整为 Label 的大小,这样您就不会看到隐藏在标签后面的绿色背景 - 而您会看到主要 window 的灰色背景。

如果在 main 中添加其他更长的标签和红色背景,您会更好地看到它 window

如果你加上

fr2.grid_propagate(False)

然后框架将保持其大小

但您仍然遇到网格问题,它没有使用 Frame 的完整尺寸,您无法将其居中或右对齐。

如果你加上

fr2.grid_columnconfigure(0, weight=1)

如果没有其他列,第 0 列将尝试使用全尺寸,标签将在单元格中居中

如果你使用

sticky='we' 

grid() 中用于标签,然后它们将填充单元格


import tkinter as tk

main = tk.Tk()
# Window size
main.geometry("400x200")
main.resizable(0, 0)
main['bg'] = 'red'
# Window position
w = main.winfo_reqwidth()
h = main.winfo_reqheight()
ws = main.winfo_screenwidth()
hs = main.winfo_screenheight()
x = (ws/2) - (w/2)
y = (hs/2) - (h/2)
main.geometry('+%d+%d' % (x, y))

fr1 = tk.Frame(main, borderwidth=2, relief="solid", bg = "#271ee3", width=400, height=50)
fr2 = tk.Frame(main, borderwidth=2, relief="solid", bg = "#0d9467", width=200, height=650)
fr3 = tk.Frame(main, borderwidth=2, relief="solid", bg = "#3e1854", width=200, height=650)

fr1.pack()
fr2.pack(side="left")
fr3.pack(side="right")


fr2.grid_propagate(False)
fr2.grid_columnconfigure(0, weight=1)

l1 = tk.Label(fr2, text="Heyho")
l1.grid(row=0, column=0, sticky='we')

l2 = tk.Label(fr2, text="Hello World")
l2.grid(row=1, column=0, sticky='we')

main.mainloop()