4

我正在使用 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)围绕这些“外部”标签获得单一边框?

我想要的是:|我的例子|

我得到什么:|我的 |例子|

4

1 回答 1

0

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

于 2021-12-15T08:21:22.050 回答