在向网格/框架添加按钮时保持背景颜色

时间:2013-12-22 16:50:17

标签: python python-3.x colors background tkinter

我遇到的问题是在向框架添加按钮时保持背景颜色,一旦我运行模块,背景颜色消失,任何帮助将不胜感激,谢谢。

请给我代码:

import tkinter
import tkinter as tk

root = tk.Tk()
root.geometry('1000x600')

var=tk.StringVar()

Frame1 = tk.Frame(root)
Frame1.configure(background='light blue',height='300',width='500')
Frame1.grid(row='0',column='0')

Frame2 = tk.Frame(root)
Frame2.configure(background='grey',height='300',width='500')
Frame2.grid(row='0',column='1')

Frame3 = tk.Frame(root)
Frame3.configure(background='grey',height='300',width='500')
Frame3.grid(row='1',column='0')

Frame4 = tk.Frame(root)
Frame4.configure(background='light blue',height='300',width='500')
Frame4.grid(row='1',column='1')


def PrintOrder():
    LabelOrder = tk.Label(Frame3,text="DONUT ORDER")
    LabelOrder.grid(row='0',column='0')
    return

Button1 = tk.Button(Frame1,text="Apple Cinnamon",height='2',width='15',command=PrintOrder).grid(row='0',column='0')
Button2 = tk.Button(Frame1,text="Strawberry",height='2',width='15',command=PrintOrder).grid(row='0',column='1')
Button3 = tk.Button(Frame1,text="Custard",height='2',width='15',command=PrintOrder).grid(row='0',column='2')
Button4 = tk.Button(Frame1,text="Sugar Ring",height='2',width='15',command=PrintOrder).grid(row='1',column='0')
Button5 = tk.Button(Frame1,text="Chocolate Caramel",height='2',width='15',command=PrintOrder).grid(row='1',column='1')
Button6 = tk.Button(Frame1,text="Lemon Circle",height='2',width='15',command=PrintOrder).grid(row='1',column='2')
Button7 = tk.Button(Frame1,text="Blueberry Blaster",height='2',width='15',command=PrintOrder).grid(row='2',column='0')
Button8 = tk.Button(Frame1,text="Strawberry Surprise",height='2',width='15',command=PrintOrder).grid(row='2',column='1')
Button9 = tk.Button(Frame1,text="Simple Sugar",height='2',width='15',command=PrintOrder).grid(row='2',column='2')

Label1 = tk.Label(Frame2,text="Donut special 6 for the price of 5").grid(row='0',column='0')
Button10 = tk.Button(Frame2,text="SPECIAL",height='5',width='20').grid(row='1',column='0')

root.mainloop()

2 个答案:

答案 0 :(得分:1)

您的相框仍然具有背景色。你可以很容易地看到它,如果你给它一个明确的颜色,以便它显示(例如:“红色”),并在按钮之间添加填充(例如:tk.Button(...)。grid(..., padx = 10,pady = 10)。我认为唯一发生的事情是按钮之间没有空间可以显示颜色,默认行为是框架缩小(或增长)以适应它内容。

其他问题包括您没有给任何行或列赋予权重,因此当主窗口缩小时它们不会增长或缩小。此外,您没有为帧设置sticky属性,因此它们不会填充它们占用的网格单元格。将sticky="nsew"添加到网格框架的位置,您可能会看到更多颜色。

使用网格时的经验法则是始终为每个项目设置sticky属性,并为至少一行和一列提供权重1(一)。

答案 1 :(得分:0)

您可以在相框上使用grid_propagate(0)。如此一来,框架的大小就无法调整为小部件的大小。

在您的代码上,我使用下一行保持Frame1的大小:

Frame1.grid_propagate(0)

您可以检查以下内容:

http://effbot.org/tkinterbook/grid.htm#Tkinter.Grid.grid_propagate-method

grid_propagate(flag)[#]

启用或禁用几何图形传播。启用后,每当子窗口小部件更改大小时,连接到此窗口小部件的网格管理器都会尝试更改该窗口小部件的大小。传播始终默认启用。

标志 为true表示启用传播。