我正在尝试在 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()
答案 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()