【问题标题】:Change specific character color in Tkinter.Canvas更改 Tkinter.Canvas 中的特定字符颜色
【发布时间】:2015-10-16 06:22:58
【问题描述】:

我正在尝试更改 Tkinter.Canvas 中特定字符的颜色...我在网上搜索解决方案,但什么也没有。

txt1 = canvasFrame.create_text(500,100, text = "redblue", font = "Calibri, 30", fill = "#4587de")

实际颜色是蓝色,我需要将“红绳”涂成红色,而“蓝绳”仍然是蓝色。

有办法做到这一点吗?

【问题讨论】:

  • 分割文本,赋予不同的颜色,然后加入它们?
  • @MohitChandak 怎么做?
  • 尝试运行同一行,文本“红色”为txt1,“蓝色”为txt2行,填写所需颜色,然后执行txt3=txt1+txt2
  • @MohitChandak 不可能,txt1 是对象而不是字符串
  • @MohitChandak:文本颜色不能这样工作。你不能像那样添加两个字符串。

标签: python python-3.x canvas tkinter


【解决方案1】:

画布不允许对一个字符串对象使用多种颜色。您将需要使用两个create_text 命令,每种颜色一个。这也意味着您必须计算画布上两个字符串的正确间距和对齐方式,使其看起来像一个字符串。

如果您需要为单个字符着色,画布不是一个很好的解决方案。如果可以,您可能希望切换到使用文本小部件。

【讨论】:

  • 制作一个蓝色的文本对象redblue,然后在上面放一个红色的text_object red 不可行吗?我还没有尝试过,但它似乎应该工作。当然,如果文本小部件适合 OP 的需要,它会更好,而且这种 hack 不适用于“redgreenblue”。
  • @saulspatz:是的,这可行,但您必须计算叠加文本的确切像素位置。
【解决方案2】:

可以在画布上放置一个文本小部件(带有彩色文本)。

from tkinter import *
root = Tk()
canvas = Canvas(root)
canvas.pack()
text = Text(canvas, height=1, width=20)
text.insert('end', 'red green blue')
text['state'] = DISABLED  # read only
canvas.create_window(100, 20, anchor='nw', window=text)
root.mainloop()

还有其他关于使用标签为文本中的切片着色的 SO 答案。

【讨论】:

    猜你喜欢
    • 2016-03-04
    • 1970-01-01
    • 2013-04-17
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 2017-06-06
    • 2017-03-27
    相关资源
    最近更新 更多