You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CustomTkinter的CTkLabel中为多变量文本的i[3]设置颜色?

问题描述

现有嵌套列表数据,通过循环创建CTkLabel标签展示内容,代码如下:

list1 = [["test", 3, 2, 0], ["test2", 4, 1, 1],["test3", 0, 5, 2]]
row = 1
for i in list1:
    text = "name: {}, x: {}, y: {}, z: {}".format(i[0],i[1],i[2],i[3])
    customtkinter.CTkLabel(master=self.frame_1, text=text).grid(row=row, column=0, sticky='nw')
    row = row + 1

希望让文本中i[3]对应的部分显示为指定颜色,该如何实现?

解决方案

CTkLabel本身不支持单个标签内的部分文本变色,可通过以下两种方式实现需求:

方法一:用CTkTextbox模拟标签效果

借助CTkTextbox的标签样式功能,插入不同格式的文本:

import customtkinter as ctk

list1 = [["test", 3, 2, 0], ["test2", 4, 1, 1],["test3", 0, 5, 2]]
row = 1
for i in list1:
    # 创建高度适配的文本框,模拟标签外观
    text_box = ctk.CTkTextbox(master=self.frame_1, height=22, width=250)
    text_box.grid(row=row, column=0, sticky='nw')
    
    # 插入普通格式的前缀文本
    prefix = f"name: {i[0]}, x: {i[1]}, y: {i[2]}, z: "
    text_box.insert("end", prefix)
    
    # 设置颜色标签,插入目标内容
    text_box.tag_config("colored_z", foreground="#ff4444")  # 替换为你需要的颜色值
    text_box.insert("end", str(i[3]), "colored_z")
    
    # 禁用编辑权限,让文本框表现得像普通标签
    text_box.configure(state="disabled")
    row += 1

方法二:拼接多个CTkLabel拆分显示

把文本拆分为普通部分和变色部分,用两个CTkLabel并排摆放:

import customtkinter as ctk

list1 = [["test", 3, 2, 0], ["test2", 4, 1, 1],["test3", 0, 5, 2]]
row = 1
for i in list1:
    # 普通文本标签
    prefix_label = ctk.CTkLabel(master=self.frame_1, text=f"name: {i[0]}, x: {i[1]}, y: {i[2]}, z: ")
    prefix_label.grid(row=row, column=0, sticky='nw')
    
    # 带指定颜色的目标文本标签
    z_label = ctk.CTkLabel(master=self.frame_1, text=str(i[3]), text_color="#ff4444")
    z_label.grid(row=row, column=1, sticky='nw')
    
    row += 1

内容的提问来源于stack exchange,提问作者Zercon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 02:06:25