无法在tkinter中设置背景颜色

4

我对这个简单的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()

最后一个错误非常明显:您将 tk.Label().grid() 的返回值分配给了 lab。您必须将 tk.Label() 的返回值分配给 lab,并在赋值后调用 .grid() - Aemyl
@Aemyl 哎呀,谢谢。我在无法让背景工作时感到非常沮丧,以至于错过了那个问题。 - user7088941
2个回答

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

  • lab.config(background="black") 出现错误'NoneType' object has no attribute 'config',因为您执行了lab = tk.Label(...).grid(...),而grid返回None,所以labNone,而不是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()

以下是一个没有使用 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()

1
一个彻底而无瑕疵的答案。+1(一旦我有15个声望点可以投票) - user7088941
对于任何遇到“nonetype”问题的人,请参阅https://dev59.com/EGAg5IYBdhLWcg3wwdLA。 - clockw0rk

1
如果您使用 root.config(background="black") 并且调整窗口大小,您会看到黑色背景。
import tkinter
import tkinter.ttk as tk
from tkinter import * 

root = tkinter.Tk()

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

Button(frame, text="Open file", command=None).grid(column=0, row=1 )
Label(frame, bg='black', fg="white", text="test test test test test test ").grid(column=0, row=2 )

root.config(background="blue")
root.mainloop()

太好了,我不知道那个。现在你能告诉我如何改变单个小部件的颜色吗? - user7088941
谢谢,+1(一旦我有15个声望点可以投票)。尽管从其他答案中看到,修复按钮侧面的颜色需要一个额外的命令。 - user7088941

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接