繁体   English   中英

Python Tkinter框架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()

有了这段代码,我得到以下窗口

到现在为止还挺好。 当我添加以下代码时,问题就来了:

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

现在看起来如此

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

它会自动将Frame调整为Label的大小,因此您看不到标签后面隐藏的绿色背景-您会看到主窗口的灰色背景。

如果在主窗口中添加其他更长的标签和红色背景,则效果会更好

在此处输入图片说明

如果添加

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM