如何在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
相关产品推荐
相关产品推荐

