tkinter 中无法设置背景颜色

use*_*941 4 python tkinter colors

我对这个简单的 tkinter 程序越来越绝望:我似乎无法更改背景颜色(或单个小部件的颜色)!这里出了什么问题?

以下是我的各种尝试以及收到的错误的要点

import tkinter
import tkinter.ttk as tk

root = tkinter.Tk()

frame= tk.Frame(root)
frame.grid(column=0, row=0)

tk.Button(frame, text="Open file", command=None).grid(column=0, row=1 )
lab=tk.Label(frame, text="test test test test test test ").grid(column=0, row=2 )

#root.config(background="black")    # does nothing
#frame.config(background="black")   # Error: unknown option "-background"
#lab.config(background="black")     # Error: 'NoneType' object has no attribute 'config'

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

j_4*_*321 5

  • frame.config(background="black")返回错误,unknown option "-background"因为这是 a ttk.Frame,而不是 a ,tkinter.Frame并且 a 的背景ttk.Frame是使用 a 更改的ttk.Style(请参见下面的示例)。

  • lab.config(background="black") 给出错误,'NoneType' object has no attribute 'config'因为您这样做lab = tk.Label(...).grid(...)grid返回Noneso labis None,而不是 a Label

  • root.config(background="black")什么都不做,因为小部件填满了窗口,所以你看不到背景,就像 naknak12 解释的那样。

这是使用小部件的示例ttk

import tkinter
from tkinter import ttk

root = tkinter.Tk()
root.configure(background='black')
# style configuration
style = ttk.Style(root)
style.configure('TLabel', background='black', foreground='white')
style.configure('TFrame', background='black')

frame = ttk.Frame(root)
frame.grid(column=0, row=0)

ttk.Button(frame, text="Open file", command=None).grid(column=0, row=1)
lab = ttk.Label(frame, text="test test test test test test ")
lab.grid(column=0, row=2)


root.mainloop()
Run Code Online (Sandbox Code Playgroud)

还有一个没有的例子ttk

import tkinter

root = tkinter.Tk()

frame = tkinter.Frame(root)
frame.grid(column=0, row=0)

tkinter.Button(frame, text="Open file", command=None).grid(column=0, row=1 )
lab = tkinter.Label(frame, text="test test test test test test ")
lab.grid(column=0, row=2)

root.configure(background='black')
lab.configure(background='black', foreground='white')
frame.configure(background='black')

root.mainloop()
Run Code Online (Sandbox Code Playgroud)