将Label与其关联时,Tkinter Frame背景消失

时间:2014-12-24 07:58:43

标签: python tkinter

我正在尝试在 Tkinter 中制作GUI。但是当我在任何框架中关联标签时,其背景颜色会消失。然而,我希望标签的整个背景都是绿色的。

我的代码粘贴在

下面
from Tkinter import *
from time import *

root = Tk()
root.rowconfigure(1, weight=1)
root.columnconfigure(1, weight=1)

leftFrame = Frame(root, width = 200, height = 200, bg = 'green')
leftFrame.grid(row = 1, column = 1)

centerFrame = Frame(root, width = 200, height = 200, bg = 'black')
centerFrame.grid(row = 1, column = 2)

rightFrame = Frame(root, width = 200, height = 200, bg = 'blue')
rightFrame.grid(row = 1, column = 3) 

b = Label(leftFrame, text = "Press me!", bg = 'green')
b.pack(side = TOP, expand = YES)

root.mainloop()

2 个答案:

答案 0 :(得分:2)

框架通常"缩小以适应"他们的内容,除非有框架上的约束。这是正常的,预期的,通常是可取的。因此,左框架将要求它足够宽以适合标签,并且足够高以适合标签。其他列中的框架,因为它们没有子项,将是您请求的大小。

因此,您有一列想要与标签一样宽和高,另外两列想要宽200像素。你有一行想要足够高,以适应一切,这意味着它与最高的小部件一样高,或200像素。这最终会在最左边的列中留下额外的空间。

如果没有指定任何选项,每行将与行中最高的窗口小部件一样高,在本例中为200像素。每列将与最宽的小部件一样宽。最左边的列想要是框架的宽度,框架本身只想要与标签一样宽。因此,最左边的列只会与标签一样宽。其他列将是200像素宽,因为这是你告诉他们的。

现在,您希望绿色框架填充它所在的单元格。在您的情况下,您还没有要求框架填充分配的空间,以便缩小以适应。您需要在框架中添加sticky选项以强制它“粘贴”#34;它所给出的空间的所有四个边缘。

leftFrame.grid(row=1, column=0, sticky="nsew")

当然,假设您计划在其中放置小部件,您也会遇到与其他帧相同的问题。

答案 1 :(得分:0)

实际的帧大小与它包含的小部件相同,因此绿色的所有内容都是帧。其他所有东西都只是填充物,以使其与其他框架的尺寸相同。要使框架填满整个可用空间,请使用“nsew”

哎呀,已在下面回答。我不知道你为什么要导入时间,但在Tkinter环境中使用时间并不是一个好主意。使用内置“后”代替http://effbot.org/tkinterbook/widget.htm

from Tkinter import *

root = Tk()
root.rowconfigure(1, weight=1)
root.columnconfigure(1, weight=1)

leftFrame = Frame(root, width = 200, height = 200, bg = 'green')
leftFrame.grid(row = 1, column = 1, sticky="nesw")

centerFrame = Frame(root, width = 200, height = 200, bg = 'black')
centerFrame.grid(row = 1, column = 2)

rightFrame = Frame(root, width = 200, height = 200, bg = 'blue')
rightFrame.grid(row = 1, column = 3) 

b = Label(leftFrame, text = "Press me!", bg = 'green')
b.grid()
root.mainloop()