有没有办法在 tkinter 中正确显示标签边框?

Posted

技术标签:

【中文标题】有没有办法在 tkinter 中正确显示标签边框?【英文标题】:Is there a way to correctly show tag borders in tkinter? 【发布时间】:2022-01-17 02:20:30 【问题描述】:

我正在使用 tkinter 开发文本标记工具。它主要是围绕使用 Text 小部件上的各种标记方法构建的。然而,让我抓狂的是,如果标签重叠,我无法在标记文本周围获得正确的边框。

考虑以下一段文本,用方括号显示的两个不同标签标记:[my [example]]

当我使用 .tag_configure("outer", borderwidth=1, relief="solid") 时,我想在“我的示例”周围设置一个边框,但是,我得到 两个 边框:如果背景颜色是,则围绕“我的”和“示例”周围设置为“示例”。如果不涉及背景颜色,它可以按我的意愿工作。但我真的需要改变背景颜色的能力!

最小的工作示例:

import tkinter as tk


class Application(tk.Frame):
    def __init__(self, master):
        super().__init__(master)

        self.grid(row=0, column=0, sticky=tk.N+tk.S+tk.W+tk.S)
        self.text = tk.Text(self)
        self.text.insert("1.0", "my example")

        self.text.tag_add("outer", "1.0", "end-1c")  # "my example"
        self.text.tag_configure("outer", borderwidth=1, relief="solid")

        self.text.tag_add("inner", "1.3", "end-1c")  # "example"
        self.text.tag_configure("inner", background="white")  # white to see the problem better

        self.text.grid(row=0, column=0)


if __name__ == "__main__":
    root = tk.Tk()
    app = Application(root)
    app.mainloop()

问题:有没有办法(可能是 hacky)在​​这些“外部”标签周围设置单边框?

我想要什么:

我得到了什么:

【问题讨论】:

【参考方案1】:

我知道的唯一解决方案是使用 Text.window_create() 在主文本中嵌入另一个带有边框的文本,并将其标签配置为内部颜色。

【讨论】:

哦。这增加了管理所有这些标签的全新级别的复杂性,不是吗?我的意思是,添加和删除标签需要将文本块移动到不同的文本小部件......也许这有点太老套了,但无论如何感谢您的建议

以上是关于有没有办法在 tkinter 中正确显示标签边框?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法修复 while 循环不使用 time.sleep 更新 tkinter 标签?

边框和背景颜色未在 mac [python -Tkinter] 中显示

如何使 tkinter 标签背景透明?

在python tkinter中调用事件时,变量不更新的标签

标签栏未正确显示图像

HTML中正确设置表格table边框border的三种办法