tkinter root bg颜色

时间:2018-01-18 22:49:14

标签: python tkinter

我正在使用tkinter创建计划。我在我的代码中将root bg颜色设置为白色,但它没有变白。 (我还将一些标签设置为白色以查看它是否变白。)

但是,当我在新文件中测试它时,它会起作用。

这是我的日程安排代码。

root=Tk()
root['bg']='white'
cp=coursePlan(root)
cp.pack()
root.title('Schedule')
root.mainloop()

这是我的测试代码。

root=Tk()
root['bg']='white'
l=Label(root,text='test')
l.grid(row=0,column=0)
root.mainloop()

schedule code UI

test code UI

1 个答案:

答案 0 :(得分:1)

在显示窗口小部件时,为parent等窗口小部件分配Label(root, ...)时,默认情况下窗口小部件占用 over 其父窗口的空间。

窗口小部件有自己的背景颜色,这些颜色不一定是透明的,因此如果窗口小部件的bg设置为'red',而父窗口的bg设置为'white'基本上有三种结果:

  1. 窗口小部件显示时选择了填充选项(pack(fill=...grid(sticky=...)),或者窗口小部件在x和y维度上都适合其父窗口,这导致父窗口完全位于窗口小部件后面,因此仅显示小部件的bg,'red'
  2. 窗口小部件会显示某些或不考虑可调整性,因此会部分占用其父级,在这种情况下,小部件及其父级的bg 'red''white'都会显示
  3. 最后,小部件根本不显示,因此只显示父级的bg 'white'
  4. 见下面的演示:

    import tkinter as tk
    
    
    def demo(*args):
        if choice.get() == 1:
            widget.pack(fill='both', expand=True)
        elif choice.get() == 2:
            widget.pack(fill='x', expand=False)
        elif choice.get() == 3:
            widget.pack_forget()
    
    def default(event):
        root.state('zoomed')
        choice.set(2)
        widget.pack(fill='x', expand=False)
    
    root = tk.Tk()
    
    root['bg'] = 'white'
    root.state('zoomed')
    
    widget = tk.LabelFrame(root, text="Displaying Options", bg='red')
    
    choice = tk.IntVar(value=2)
    fill = tk.Radiobutton(widget, variable=choice, text="Fill / Overfit", value=1)
    no_resize = tk.Radiobutton(widget, variable=choice,
                                text="Some / No regard to resizability", value=2)
    no_display = tk.Radiobutton(widget, variable=choice, text="Not displayed",
                                                                        value=3)
    choice.trace_add('write', demo)     # to call demo when choice is modified
    root.bind_all("<Escape>", default)  # to go back to initial state when user hits esc
    
    widget.pack(fill='x', expand=False)
    fill.pack(side='left')
    no_resize.pack(side='left')
    no_display.pack(side='left')
    root.mainloop()