Tkinter 标签的优先级
Posted
技术标签:
【中文标题】Tkinter 标签的优先级【英文标题】:Priority of Tkinter tags 【发布时间】:2020-03-26 13:43:30 【问题描述】:我知道这是重复的,但另一个问题没有有效答案,而且有点令人困惑
当您将标签添加到 tkinter 文本小部件时,第一个标签将获得优先权。如果最近添加的标签优先,我会更喜欢它。在我的最小可重现示例中:
import tkinter as tk
win = tk.Tk()
txt = tk.Text(win)
txt.grid(row=0, column=0)
txt.insert('1.1', 'Hello Very Worldy World!')
txt.tag_add('tagone', '1.2', '1.4')
txt.tag_config('tagone', foreground='yellow')
txt.tag_add('tagtwo', '1.7', '1.13')
txt.tag_config('tagtwo', foreground='purple')
txt.tag_add('tagone', '1.6', '1.14')
txt.tag_config('tagone', foreground='yellow')
tk.mainloop()
如果你运行它,你会看到紫色标签进入前景,而不是黄色标签。有没有办法根据时间顺序来定义标签优先级,而不是现在使用的?
【问题讨论】:
如果你说I know this is a duplicate
,指定你认为它是/可以是重复的问题是有用的。这样可以更轻松地评估声明 did not have a valid answer, and was kind of confusing
。
【参考方案1】:
标签的优先级是基于标签的创建时间,而不是标签的应用时间。
来自effbot:
如果您将多个标签附加到一系列文本,则最近创建的标签中的样式选项会覆盖早期标签中的选项。在以下示例中,生成的文本是黄色背景上的蓝色。
text.tag_config("n", background="yellow", foreground="red")
text.tag_config("a", foreground="blue")
text.insert(contents, ("n", "a"))
请注意,将标签附加到范围的顺序无关紧要;重要的是标签创建顺序。
您可以使用
tag_raise
和tag_lower
更改标签优先级。如果在上面的示例中添加text.tag_lower("a")
,则文本变为红色。
因为您在tagtwo
之前创建了tagone
,所以tagtwo
获得优先权。您可以通过为第三个范围指定新名称 (tagthree
)、在创建 tagone
之前创建 tagtwo
或使用 txt.tag_lower('tagtwo')
/txt.tag_raise('tagone')
来获得预期的行为。
【讨论】:
以上是关于Tkinter 标签的优先级的主要内容,如果未能解决你的问题,请参考以下文章