Python-Tkinter-frame-newby几何问题?

2024-06-26 18:10:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我对特金特和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

我的目标是得到一个窗口,在第一帧(fr1)中有一个按钮,它的几何结构与fr1相同。在fr2和fr3中,我希望彼此之间有几个标签。我在fr2和fr3中的标签应该有列0,但有升序行(0,1,2,3…)。我怎么做


Tags: 代码mainwidthframepacktkbgheight
1条回答
网友
1楼 · 发布于 2024-06-26 18:10:41

它会根据标签的大小自动调整框架的大小,这样您就不会看到隐藏在标签后面的绿色背景,而可以看到主窗口的灰色背景

如果在主窗口中添加其他较长的标签和红色背景,您可以更好地看到它

enter image description here

如果你加上

fr2.grid_propagate(False)

然后框架将保持其大小

enter image description here

但是您仍然有网格的问题,它没有使用Frame的完整大小,并且您不能将它居中或向右对齐

如果你加上

fr2.grid_columnconfigure(0, weight=1)

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

enter image description here

如果你使用

sticky='we' 

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

enter image description here


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

相关问题 更多 >