如何在Python的tkinter 8.5中将ttk.LabelFrame的蓝色标题更改为黑色

3 投票
4 回答
4399 浏览
提问于 2025-04-18 15:05

我在一台运行Windows 7的电脑上,使用的是tkinter 8.5和Python 3.3。

下面的代码让Labelframe的标题显示成蓝色字体。

from tkinter import *
from tkinter import ttk

root = Tk()

lf = ttk.LabelFrame(root, text="Why is this blue?")
lf.pack()

label = ttk.Label(lf, text="label")
label.pack()

我尝试通过添加一个ttk.Style()来解决这个问题,但显示效果却出乎意料:

from tkinter import *
from tkinter import ttk

root = Tk()

s = ttk.Style()
s.configure('TLabelframe.Label', font='arial 14 bold')

lf = ttk.LabelFrame(root, text="Now it's black, but w/ a bizarre display"
                    " and no etched frame.", style='TLabelframe.Label')
lf.pack()

label = ttk.Label(lf, text="label")
label.pack()

有没有办法让ttk.LabelFrame的标题显示成黑色,而不会出现奇怪的副作用呢?

4 个回答

0

首先,定义你的 ttk 风格:

frame_label = ttk.Style()
frame_label.configure('Frame.TLabel', 
                       foreground = "black", # fontcolor
                       font=("Sans-serif",11)
                       )

然后把这个风格应用到你的框架文本上,比如说“为什么这个是蓝色的?”:

lbl = ttk.Label(text = "Why is this blue?", style='Frame.TLabel')
label_frame = ttk.LabelFrame(root,
                             labelwidget=lbl
                              )
0

你只需要把 ttk.LabelFrame 选项中的 style='TLabelframe.Label' 去掉就可以了。

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

s = ttk.Style()
s.configure('TLabelframe.Label', font='arial 14 bold')

lf = ttk.LabelFrame(root, text="Now it's black, but w/ a bizarre display"
                    " and no etched frame.")
lf.pack()

label = ttk.Label(lf, text="label")
label.pack()
root.mainloop()

我使用的是 Python 3.7.3 和 tkinter 8.6。

0

你也可以通过前景属性来改变这个,比如用 tk.LabelFrame(window, foreground='red') 这段代码,把文字颜色改成红色。

6

看起来在Windows系统中,ttk.Labelframe的标题默认是蓝色的。不太清楚为什么会这样。

Mac和Linux默认是黑色,而Windows默认是蓝色。

我找到了一种解决办法,就是创建一个ttk.Label,然后把它作为ttk.Labelframe的labelwidget参数传进去。不过这可能算是一种变通方法。无论如何,下面的代码在我的Windows 7电脑上可以把标题文字显示为黑色。

from tkinter import *
from tkinter import ttk

root = Tk()

l = ttk.Label(text="Not blue anymore")

lf = ttk.Labelframe(root, labelwidget=l)
lf.pack()

label = ttk.Label(lf, text="label")
label.pack()

root.mainloop()

撰写回答